收藏
回答

bindscroll 延迟怎么办

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug scroll-view 客户端 7.0.3 2.6.1

想要 实现滚动页面购物车向右滑动隐藏,停止滚动向左滑动显示,但是bindscroll有延迟,是因为造成了大量的setData吗

js代码:

var start = e.detail.scrollTop;

this.setData({

iSscroll: true

})

clearTimeout(timer);

var timer = setTimeout(() => {

var end = e.detail.scrollTop;

if (end == start) {

this.setData({

iSscroll: false

})

console.log('停止滚动了');

}

}, 100);


回答关注问题邀请回答
收藏

3 个回答

  • 珱㻏
    珱㻏
    2019-09-20

    请教下,如果是左右双联动(像电商类分类页面,左侧是一级分类,右侧是二级分类是)。右侧内容滚动时,对应滚动并选中到左侧一级分类,如果用定时器的这种方式,滚动稍快的话,滚动到左侧一级分类,会有一跳一跳的效果。是否还有其它的优化方案?

    2019-09-20
    有用
    回复
  • 董博文
    董博文
    2019-03-05

    试试这样

    this.data.count = 0

    onScroll() {

        this.data.count += 1

        if (this.data.count == 20) {

            this.data.count = 0

            this.setData({})

        }

    }

    2019-03-05
    有用
    回复 2
    • soul
      soul
      2019-03-06

      不行的,停止滚动count也不一定到20呢

      2019-03-06
      回复
    • 董博文
      董博文
      2019-03-06回复soul

      if (!this.data.isScroll) {

      this.setData({

      isScroll: true

      })

      } else {

      clearTimeout(this.data.timer)

      this.data.timer = null

      this.data.timer = setTimeout(() => {

      this.setData({

      isScroll: false

      })

      console.warn('stop scroll')

      }, 500)

      }

      应该能达到你要的效果吧

      2019-03-06
      回复
  • 小打卡
    小打卡
    2019-03-05

    100ms调用一次setData。清除定时的方法似乎这么写没有用吧。每次调用都会生成一个新的time_id.这样肯定不行吧。

    2019-03-05
    有用
    回复 1
    • soul
      soul
      2019-03-06

      那请问有什么好的办法吗

      2019-03-06
      回复
登录 后发表内容