微信小程序JS中获取ID和Class怎么获取

微信小程序JS中获取ID和Class怎么获取,第1张

Uniapp 使用的是基于 webview 的跨平台解决方案,因此它不能直接 *** 作 DOM (Document Object Model)。实际上,其工作方式是通过将组件编译成小程序或 APP 的组件来实现跨平台。相比于直接 *** 作 DOM,使用组件编写 Ui 更容易实现跨平台兼容性。因此,Uniapp 的组件化能够大大提高开发效率和可维护性,同时缩短了开发周期,也降低了开发成本。

小程序的设计并没有完全遵循 Web 规范,导致小程序生态和传统 Web 开发生态之间的割裂,海量优秀的 Web 物料并不能直接用于小程序开发。因而 Taro 在相当一段时间内生态都相对薄弱,UI 框架选择不多的问题更是深深困扰着开发者。

另一方面,业界有着存量的 H5 应用,中短期内 H5 应用适配到小程序端的需要还会存在。我们希望能减少 H5 应用迁移到小程序端的成本,甚至能够直接运行在小程序端。

Taro 团队一直在思考如何最大限度地在小程序环境中复用 Web 生态,直到 Taro 30 诞生后,这种想法有了落地的可能。下文将介绍基于 Taro 30 实现 H5 同构的思路与问题,以及我们尝试适配了三大移动端 UI 框架 WEUI Ant Design Mobile VantUI 的实验结果。

Taro 30 是一款重运行时的跨端框架,它通过模拟实现浏览器的 BOM 和 DOM API 实现了对 React、Vue 等 Web 开发框架的兼容。

既然已经有了浏览器环境的 BOM 和 DOM API,Taro 应用和 Web 应用之间的鸿沟在于小程序组件和 HTML 标签之间的差异。

Taro3 的渲染数据流如下:

前端框架 -> Taro DOM -> 小程序 data

HTML 标签和小程序组件的标签名、属性、事件是有差异的,而前端框架无需感知这些差异。

因此前端框架适配层、Taro DOM 层不需要改动,只要在 Taro DOM 序列化为小程序 data 这一步作映射即可。

HTML 标签相对小程序组件封装程度更低、功能更简单,可以看作是小程序组件的子集。因此可以按一定的规则,把 HTML 标签映射为小程序组件,如:

完整的标签名映射规则请看: RFC 附录一

如果 HTML 标签的属性能在对应小程序组件的属性上找到对应,则进行映射,如:

完整的属性名映射规则请看: RFC 附录二

把 HTML 特有的事件在小程序端找到相似的事件进行映射,如:

完整的事件映射规则请看: RFC 附录三

前文介绍了我们会把 HTML 标签映射为小程序组件,但是 H5 应用中使用到的 CSS 标签选择器就会失效。

因此 Taro 使用了类名去进行模拟:

Taro 提供两种内置的浏览器默认样式,可以直接引入生效:

理想很美好,但现实却略显骨感。即使 Taro 能实现 BOM、DOM API,支持使用 HTML 标签等,同构方案还是存在着一些框架层面抹平不了的差异。以下列举出若干主要限制:

在 H5 中我们可以调用 DOM API 同步获取元素的尺寸:

但是在小程序中,获取元素尺寸的 API 是异步的:

因此不能兼容那些使用了同步 DOM API 去获取元素尺寸的组件。

<canvas> 、 <video> 、 <audio> 等标签在 H5 端可以直接调用 HTMLElement 上的方法:

但是在 Taro 中,要调用组件上的原生方法,必须先创建对应的 Context :

部分样式或 CSS 选择器在小程序中不支持,如:

首先需要安装 v33 的 CLI 工具:

然后进入项目,把 packagejson 文件中 taro 相关依赖的版本修改为 ^330-alpha2 ,再重新安装依赖(建议先把 node_modules 文件夹删除)。

为了节省项目空间,同构功能是可选的,以 Taro 插件的形式提供。

首先开发者需要安装插件 @tarojs/plugin-html :

然后配置使用此插件:

为了验证同构功能的可用性和效果,我们对 CSS 样式库 WEUI 、React 组件库 Antd Design Mobile 、Vue2 组件库 VantUI 的所有组件进行了测试。

测试效果比较理想,甚至稍微超出我们的预期,配合各组件库自身的按需加载能力,能以小巧的体积使用丰富的组件,相信各位开发者会喜欢这个功能。

仓库地址: taro-weui

WEUI 是一个 CSS 的样式库,与框架无关,兼容性比较高,大部分组件能直接使用。

仓库地址: taro-antd-mobile

能直接兼容使用的组件大概为 80%,主要问题在于:

仓库地址: taro-vant

VantUI 的组件十分丰富,能直接兼容使用的组件大概为 70%。部分开发者会在 Taro 中配合使用 Vant Weapp,但 Vant Weapp 只能运行在微信小程序,因此对 VantUI 的直接适配是一个很好的补充。

适配过程主要遇到的问题有:

同构方案还在持续优化中,部分实现还没有最终定稿。欢迎各位开发者到我们的论坛下留言,提出您的宝贵意见~: 同构方案 RFC 。

欢迎关注凹凸实验室

众多类似商城项目中,都会有列表分类标签随着界面滚动吸顶的效果

APP中实现相关功能很容易,h5也可以动态 *** 作DOM来设置

微信小程序没有DOM,该怎么实现呢?

其实这个场景还是比较简单的,正常情况下导航标签是在列表中间的,滑到顶部时吸顶,再拉下来时又回到原来的位置

根据场景,有两个参考思路:

1、顶部定位一个常在的同样的导航标签,通过页面的 scrollOffset 来控制显隐即可

2、通过动态添加 fixed 样式,来动态改变标签在页面中的位置

ps:不过第二种思路会有一个缺陷就是切换位置时页面会因为少了一部分而上移,所以还是需要补白,所以还是用第一种思路

我这里是用了自定义导航栏的,所以实现上会有所不同,如果是用系统导航栏可以稍微调整一下,因为偏移量会有所区别

CSS部分

JS部分

其中 CacheUtilnaviStatuHeight 这个是我应用启动时获取的导航+状态栏高度,X和其他机型还是有所区别,如果是系统导航栏的话这些相关逻辑都可以省略

这里为什么用navigator而不用view呢?

因为navigator是原生组件,可以在最上层,因为有可能列表内容有原生组件的话滑动就会有问题,所以navigator在不设置url的情况下和view的效果差不多,故采用navigator

cover-view:bug: 自定义组件嵌套 cover-view 时,自定义组件的 slot 及其父节点暂不支持通过 wx:if 控制显隐,否则会导致 cover-view 不显示,而且使用的版本限制也很多,所以就不考虑

以上就是关于微信小程序JS中获取ID和Class怎么获取全部的内容,包括:微信小程序JS中获取ID和Class怎么获取、微信小程序怎么开发 微信小程序开发教程分享、uniapp为什么不支持dom等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9283091.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存