收藏
回答

小程序 scroll-view 的 bindscroll响应不及时,有卡顿

滑动的时候,会出现卡顿现象,触发的bindscroll 函数会卡顿,应该怎么解决

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

9 个回答

  • 黄思程
    黄思程
    2017-11-15

    惯性滚动无法去掉

    2017-11-15
    有用
    回复
  • 黄思程
    黄思程
    2017-11-14

    在手机上,touchend后还有一段惯性滚动,这个也会触发bindscroll,请确认代码逻辑有没有考虑这点。

    另外,只是单纯的保存scrollTop的状态,不建议setData,直接this._scrollTop = e.detail.scrollTop即可,只有更新界面才应该用setData

    2017-11-14
    有用
    回复 5
    • struggle
      struggle
      2018-06-05

      我现在遇到的问题和这个类似  就是想边滚动  边记录滚动的位置  当滚动的位置 大于某个值时 比如 >300 就将更新页面的显示情况  需要通过this.setData({isfixed:true})  如果小于 <300 this.setData({isfixed:false}) 则设置为  改变页面的某个区域的定位方式  但是反应很迟钝  这个怎么解决

      2018-06-05
      3
      回复
    • 両儀式          ༽
      両儀式 ༽
      2018-07-27回复struggle

      我也是遇到这个问题,请问你是怎么解决的啊~

      2018-07-27
      回复
    • 李泽定
      李泽定
      2018-08-21回复struggle

      您好, 我也遇到了相同问题,请问解决了吗

      2018-08-21
      回复
    • 好腻诺
      好腻诺
      2018-11-01回复struggle

      滑动这块的响应是在太不灵敏,最后决定吧有关滑动效果的功能都去掉了,你说的问题确实都有,但是没解决掉,之前就觉得在苹果上还好,android是真的不行

      2018-11-01
      回复
    • LikW💕
      LikW💕
      2021-04-15回复好腻诺
      你好,请问这个问题你解决了吗
      2021-04-15
      回复
  • 黄思程
    黄思程
    2017-11-13

    卡顿是如何评估的?

    2017-11-13
    有用
    回复 1
    • 周军
      周军
      2019-06-10

      延迟几秒之后才开始执行onpagescroll的方法

      2019-06-10
      1
      回复
  • Anyedgm
    Anyedgm
    2020-05-30

    暴力解决……

    scrollEvent(e) {
      clearTimeout(this._st)
      this._st = setTimeout(() => {
        this.setData({
          scrollTop: e.detail.scrollTop
        })
      }, 300)
    }
    
    2020-05-30
    有用 3
    回复 3
    • 呱
      2020-06-30
      节流可以
      2020-06-30
      回复
    • 小肥柴的日常(锋)
      小肥柴的日常(锋)
      2020-08-24
      这个this._st是代表什么?
      2020-08-24
      回复
    • 丶Alan
      丶Alan
      2021-01-07
      确实加上防抖后能够达到想要的效果了,谢谢大佬
      2021-01-07
      回复
  • 方先生
    方先生
    2018-07-30

    我也遇到了,特别在android上

    2018-07-30
    有用 1
    回复 2
    • 李泽定
      李泽定
      2018-08-21

      您好 , 这个卡顿问题解决了吗,我也遇到了这个问题

      2018-08-21
      回复
    • 🐬
      🐬
      2018-08-28

      您好,我也遇到这个问题了  有没有解决办法

      2018-08-28
      回复
  • Monster
    Monster
    2018-07-30

    也遇到了 相同问题 求解答

    2018-07-30
    有用 1
    回复 2
    • 李泽定
      李泽定
      2018-08-21

      您好, 我也遇到了相同问题,请问解决了吗

      2018-08-21
      回复
    • 好腻诺
      好腻诺
      2018-08-29

      已经去除滑动着方面的功能了

      2018-08-29
      回复
  • 太阳照耀我
    太阳照耀我
    2020-05-28

    bindscrolltoupper都会有时候失效

    2020-05-28
    有用
    回复
  • 好腻诺
    好腻诺
    2017-11-15

    嗯嗯,滚动惯性确实没有考虑的,可能是这个原因吧,在iphone6上面就是会先向上滚一下在滑到指定的view,有什么属性可以去除这个惯性吗。还有变量存值哪里,多谢指教。

    2017-11-15
    有用
    回复
  • 好腻诺
    好腻诺
    2017-11-14

    在scroll上面绑定了bindscroll和bindtouchend,bindscroll用来保存当前视图距离顶部位置,bindtouchend通过获取bindscroll获取的scrollTop的值判断滑动到某个view;但是在开发者滑的时候没问题,在真机上面停止触碰滑动后,会停留个0.5秒左右的时间在滑到指定的view上面。可能是bindtouchend有问题吧。


    <scroll-view scroll-y style="height: {{scrollHeight}}px;" lower-threshold="150"  wx:if="{{index == 0}}"  bindscrolltolower="loadMore" bindscroll="bindScroll" scroll-into-view="{{recomment_view_id}}" scroll-with-animation="{{true}}" bindtouchend="bindScrollEnd">


    bindScroll: function(e){

            var that = this;

            var scrollTop = e.detail.scrollTop;

            var activeIndex = that.data.activeIndex;

            if(activeIndex == 0){

                that.setData({

                    recomment_scroll_top: scrollTop

                })

            }else{

                that.setData({

                    new_scroll_top: scrollTop

                })

            }

        },

        bindScrollEnd: function(e){

            var that = this;

            var activeIndex = that.data.activeIndex;

            if(activeIndex == 0){

                var scrollTop = that.data.recomment_scroll_top;

                console.log(scrollTop);

                if(scrollTop <= 0){

                    that.setData({

                        recomment_view_id: 'recomment_refresh'

                    })

                    that.getShaiList(1);

                }

                if(scrollTop < 60 && scrollTop > 0){

                    that.setData({

                        recomment_view_id: 'recomment_content'

                    })

                }

            }else{

                var scrollTop = that.data.new_scroll_top;

                if(scrollTop <= 0){

                    that.setData({

                        new_view_id: 'new_refresh'

                    })

                    that.getShaiList(1);

                }

                if(scrollTop < 60 && scrollTop > 0){

                    that.setData({

                        new_view_id: 'new_content'

                    })

                }

            }

        },


    2017-11-14
    有用
    回复
登录 后发表内容