当vue遇见better-scroll所遇到的坑

当vue遇见better-scroll所遇到的坑

一、问题描述

初次加载可以滑动,刷新之后不能滑动了

在学习vue的过程中,从网上找了一个案例去练习,视频中老师用到了better-scroll,然后跟着一模一样的敲,但是总是不能如愿以偿,初次加载可以正常只用滑动,一旦页面发送刷新,则鼠标滚动就失效了。找了很久解决办法,但是也没能解决。

从网上找过的办法,给出其中普遍给出的解决办法
1、给外面加上this.$nextTick(),并没能解决问题

//解决:
this.$nextTick(()=> {
    
    
    //操作
    this.scroll = new BScroll(this.$refs.className,{
    
    })
})

2、在new出的实例中添加disableTouch: false,依然不起作用
使用的时候为什么滚动不起作用
首先在在你引入better-scroll成功之后,你的html结构应该如下:

<div ref="wrapper" class="wrapper"> <div class="content"></div> </div>
mounted() {
    
    
    this.$nextTick(() => {
    
    
      this.scroll = new BScroll(this.$refs.wrapper, {
    
    
        click: true,
        disableTouch: false,
      })
    });
  }

直接让better-scroll管理wrapper这个元素,但是值得注意的是在wrapper元素之内你只能放一个标签,其余标签请放到content元素内部。与此同时这个wrapper必须给个高度height,如果不能滚动请在better-scroll对象中添加这个属性:disableTouch: false, //启用手指触摸,如果你想显示滚动条的话,最好给wrapper元素添加相对定位(对文档流不影响),这样滚动条就完美了,不会滚到外面去。

二、解决办法

最终还是静下心来,好好想一想问题出在哪里,在官网上认真的看了看,发现了问题所在原因。视频中老师用的1.x的版本,这个版本对于dom发生变化,会自动重新计算当前的scroll,所以当加载完页面(成功请求数据后)或者在浏览器再次刷新都是没问题的,可以正常使用。但是我做练习的时候使用的是2.x的版本,当我刷新页面之后,并没有重新计算scroll,看看官网怎么说的
在这里插入图片描述
看完官网的描述是不是顿然醒悟,2.x版本将这些以插件的形式使用,所以你必须在new出的示例中添加一个observeDOM:true这样的属性,以使其开启dom监听,从而使得每次都能在dom加载完,计算出最新的scroll之后,以使得正常进行滑动

正确代码如下

mounted() {
    
    
    this.$nextTick(() => {
    
    
      this.scroll = new BScroll(this.$refs.wrapper, {
    
    
        click: true,
        observeDOM:true
      })
    });
  }

三、官网描述

observe-dom
开启对 content 以及 content 子元素 DOM 改变的探测。当插件被使用后,当这些 DOM 元素发生变化时,将会触发 scroll 的 refresh 方法。 observe-dom 插件具有以下几个特性:

针对改变频繁的 CSS 属性,增加 debounce
如果改变发生在 scroll 动画过程中,则不会触发 refresh

在这里插入图片描述

Guess you like

Origin blog.csdn.net/qq_41880073/article/details/117263634