用scroll-view 组件监听滚动某个位置setData赋值很慢
发布于 5 年前 作者 taogong 4240 次浏览 来自 问答

用scroll-view向上或向下监听滚动到某一个位置,然后用this.setData让scrollTop变成true或false,使某一块fixed定位到页面顶部,我直接在页面上显示scrollTop的值,很慢才显示出来。这样导致fixed布局的那个块也定位很慢,用户体验非常差。PS:我尝试用showToast输出,速度非常快,证明方法是没问题的,有问题的是setData赋值很慢。

5 回复

是因为赋值setData调用太频繁了

试试直接给这个导航栏设置这个样式属性呗

position: -webkit-sticky;

position: sticky;

top: 0;

和我遇到的问题一样啊。有时候卡在那里不动。

  1. 页面渲染时候获取nav块距离顶部的高度

wx.createSelectorQuery().select(’#nav’).boundingClientRect(function (rect) {

console.log(rect)

_this.setData({

top: rect.top

})

}).exec()

  1. bindscroll方法监听向下滚动位置

if (e.detail.scrollTop >= this.data.top) {

this.setData({

scrollTop: true

})

} else {

return;

}

  1. bindscrolltoupper监听向上滚动是否到nav块的位置

scrolltoupper: function (e) {

this.setData({

scrollTop: false

})

},

ps: scrollTop用来控制nav块定位到页面顶部

不是赋值慢,是渲染慢,渲染是个异步的动作,你要做的是什么效果?

回到顶部