没有解决,开发者工具上依然很卡。我感觉这个情况出现是不确定的,在开发者工具上经常出现,但是在真机上会好很多,只会偶尔出现。 我后来参考 touch-ui 的 sticky 实现方式实现了吸顶效果,真机体验不错,能够接受。
小程序调用boundingClientRect等获取元素位置信息很慢如题,我要实现一个sticky组件,需要在onPageScroll中调用boundingClientRect获取元素的位置信息,但是 现在有一个问题: 如果页面慢慢滚动的话,能在4ms内获取到元素位置信息,看起来过渡就很流畅; 而如果一下子将页面滚动到顶部或者底部(页面到头后会超出可滚动区域然后回弹一下),这个时候获取位置信息就会很慢,平均500ms,有时候是1700ms,这会导致过渡的时候有一个卡顿。 下图console中打印的是我滚动页面时,每次调用boundingClientRect前和执行boundingClientRect的回调函数之间的时间差,可以看到,有时候很快(2、30、80ms),有时候就很慢(315、1367、1900ms)。 [图片] [图片] 我已经给onPageScroll事件设置了debounce,保证滚动结束后100ms后才调用boundingClientRect。 我上传了一个代码片段,复现步骤是:滚动的稍微慢点,或者特别快(我也不知道具体是什么情况下)多试试。它有时候获取得很快,都在10ms内: [图片] 有时候就获取得很慢,是1000ms以上: [图片] 请问这是什么原因?
2018-06-16### 设置根元素样式 #### :host 在组件内部可以通过 `:host` 选择符,这个的好处是不需要在整个组件wxml外面单独用一个 `<view class="root-class">` 包装: ```CSS :host { ... } ``` #### 组件名 在页面内通过组件标签名为组件设置样式: ```CSS my-component: { ... } ```
能否直接在组件html上为组件根元素设置自定义class如题,假如我有一个spinner组件,它在不同的页面里,显示的位置是不同的,因此我需要为每个spinner设置不同的class。再假设我有一个middle样式,将一个元素显示在页面正中。现在我希望在当前这个页面里,spinner组件显示在页面正中。 按照目前的小程序能力,我能想到的是以下几种实现方式。一种是在spinner外部包裹一个view,添加自定义class: [代码]<[代码][代码]view[代码] [代码]class[代码][代码]=[代码][代码]"middle"[代码][代码]>[代码][代码] [代码][代码]<[代码][代码]spinner[代码][代码]></[代码][代码]spinner[代码][代码]>[代码][代码]</[代码][代码]view[代码][代码]>[代码] 另一种是为spinner定义externalClasses,然后从外部把“middle”这个class传给spinner组件。 最后一种是在spinner内部设置host选择器样式,但这会造成组件与自己的显示位置紧耦合,不利于修改。 可否实现如下功能:在spinner组件上直接设置class属性,可以将这些class直接挂在spinner组件的根元素上 即: [代码]<[代码][代码]spinner[代码] [代码]class[代码][代码]=[代码][代码]"middle"[代码][代码]></[代码][代码]spinner[代码][代码]>[代码] --- 补充: 之所以有这个需求,是因为我之前用vue时,vue支持此功能。但是vue强制要求每个组件只有一个根元素,而小程序并无此要求。 那么请问有没有什么优雅的方式实现我的需求?
2018-05-24