收藏
回答

用scroll-view 组件监听滚动某个位置setData赋值很慢


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


最后一次编辑于  2018-07-04
回答关注问题邀请回答
收藏

6 个回答

  • Tammy
    Tammy
    2020-04-21

    我也遇到这个问题,体验感很差,请问解决了吗?

    2020-04-21
    有用
    回复
  • 2018-07-05

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

    2018-07-05
    有用
    回复
  • 吾爱吾家
    吾爱吾家
    2018-07-04

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

    2018-07-04
    有用
    回复 5
    • 陌上花開等雨來
      陌上花開等雨來
      2018-07-05

      现在解决了没?

      2018-07-05
      回复
    • 吾爱吾家
      吾爱吾家
      2018-07-05回复陌上花開等雨來

      没有,不知道怎么弄,我看了几个小程序,好像都有这个问题。

      2018-07-05
      回复
    • 両儀式          ༽
      両儀式 ༽
      2018-07-30回复陌上花開等雨來

      你好,请问解决了吗? 一样的问题,但我发现链家小程序一样的效果 却没有这个问题,不知道他们怎么解决的~

      2018-07-30
      回复
    • 両儀式          ༽
      両儀式 ༽
      2018-07-30回复吾爱吾家

      你好,请问解决了吗? 一样的问题,但我发现链家小程序一样的效果 却没有这个问题,不知道他们怎么解决的~

      2018-07-30
      回复
    • 泡泡茶壶
      泡泡茶壶
      2019-01-02回复両儀式 ༽

      链家那个我也看到了,不知道怎么做的,你后来搞好了吗怎么弄啊,setdata太慢了


      2019-01-02
      回复
  • 陌上花開等雨來
    陌上花開等雨來
    2018-07-04

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

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

    console.log(rect)

    _this.setData({

    top: rect.top

    })

    }).exec()

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

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

    this.setData({

    scrollTop: true

    })

    } else {

    return;

    }

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

    scrolltoupper: function (e) {

    this.setData({

    scrollTop: false

    })

    },


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




    2018-07-04
    有用
    回复 3
    • 卢霄霄
      卢霄霄
      2018-07-05

      本来 sticky 就是这个效果,不过这个属性暂时不稳定,有兼容问题。要不换种实现方式吧,固定顶部的,一直在,但是隐藏着,过了位置就显出来。

      2018-07-05
      回复
    • 陌上花開等雨來
      陌上花開等雨來
      2018-07-06

      我现在就是这样实现的,有一个辅助的块一直固定在顶部,然后通过scrollTop控制它显示隐藏的。

      2018-07-06
      回复
    • 永恒君
      永恒君
      2018-07-07

      以前我也是这样做的,效果还好,只是比这个多加了一个是否变化的判断。

      比如在 e.detail.scrollTop >= this .data.top 中加入 if (this.data.scrollTop == lastScrollTop) return 之类的。

      2018-07-07
      回复
  • 🍍Horace
    🍍Horace
    2018-07-04

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

    position: -webkit-sticky;

    position: sticky;

    top: 0;

    2018-07-04
    有用
    回复
  • 卢霄霄
    卢霄霄
    2018-07-04

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

    2018-07-04
    有用
    回复 4
    • 陌上花開等雨來
      陌上花開等雨來
      2018-07-04

      监听页面向下滚动到中部导航栏的位置时,让导航栏fixed定位到页面顶部。向上滚动到导航栏位置时,fixed定位去掉,导航栏复原。

      2018-07-04
      回复
    • 陌上花開等雨來
      陌上花開等雨來
      2018-07-04

      效果是做出来的,在安卓机上导航栏定位很慢,卡几秒才fixed定位到页面顶部。向上滚动复原也很慢

      2018-07-04
      1
      回复
    • 卢霄霄
      卢霄霄
      2018-07-04回复陌上花開等雨來

      大概知道了,我没有做个这种效果,能看看bindscroll部分的代码吗

      2018-07-04
      回复
    • 両儀式          ༽
      両儀式 ༽
      2018-07-30回复陌上花開等雨來

      解决了吗朋友 我也急啊~这个问题~

      2018-07-30
      回复
登录 后发表内容