likes
comments
collection
share

好用的滚动插件——BetterScroll2.0

作者站长头像
站长
· 阅读数 40

前言

日常开发中我们经常用到滚动条去展示数据,浏览器自带的滚动条看起来不太美观,我们可以通过css样式修改或者用ui组件比如el-scrollbar去修改。如果我们想要拓展滚动的功能,那么可能就需要下载插件,下面我来介绍一个好用的滚动插件——BetterScroll2.0插件。

BetterScroll

BetterScroll——更好的插件,简单直白,该插件确实做到了这点,它适应各种的滚动项目需求,支持移动端与pc端,用起来也非常的简单。标题上所写的是2.0,那么它也就有1.0了,2.0跟1.0最大的区别就是2.0将核心包进行了拆分支持按需加载,这也是推荐2.0的原因,它能够减少打包的体积。BS滚动原理跟原生浏览器一样,父容器高度固定,当子元素高度超过父容器就能进行滚动了。接下来我们从一个案例入手,了解BS的使用。

下载

上面提到了BS2.0可以按需加载,日常我们直接下载@better-scroll/core即可,它包含了核心代码,能够支持滚动能力。

npm install @better-scroll/core --save
yarn add @better-scroll/core

我们也可以安装better-scroll,就能应用该插件的所有功能。插件的使用也非常简单,我们在需要的页面引入该插件,挂载到具体dom就大功告成了。

    import BScroll from '@better-scroll/core'
    const ele = new BScroll(元素类名, {
    })

实例

我们用vue写一个滚动列表,这里我运用了Tailwind CSS书写样式,它就是样式的集合,开发中直接在写对应的类名就可以,避免了简单重复的css书写,想体验的话可以下载配置一下,嫌麻烦的直接用CSS。

   <template>
 <div ref="bsRef" class="h-96 overflow-hidden">
    <div>
      <div
        class="h-20 w-20 bg-slate-500 m-2 flex justify-center items-center"
        v-for="item in list"
        :key="item.value"
        ref="itemRefs"
      >
        {{ item.name }}
      </div>
    </div>
  </div>
</template>

<script setup lang="ts">
interface Item {
  name: string
  value: number
}
const list: Item[] = [
  {
    name: '1',
    value: 1,
  },
  {
    name: '2',
    value: 2,
  },
  {
    name: '3',
    value: 3,
  },
  {
    name: '4',
    value: 4,
  },
  {
    name: '5',
    value: 5,
  },
  {
    name: '6',
    value: 6,
  }
]
</script>

好用的滚动插件——BetterScroll2.0 接下来我们用BS去绑定一下:

   import BScroll from '@better-scroll/core'
   
   const bsRef = ref<HTMLDivElement | null>(null)
   let ele = null
   const initScroll = () => {
  if (bsRef.value) {
    ele = new BScroll(bsRef.value)
  }
}
onMounted(() => {
  initScroll()
})

挂载完之后,就可以根据需要设置配置项,我们可以了解下常用的配置项与方法,剩下的我们去官网查找即可。

  • startX/Y:设置横纵轴的位置。
  • scrollX/Y:设置横纵滚动条,其中y轴默认为ture,x轴为false。
  • preventDefault:是否阻止默认事件,默认为ture,也就是说BS里面内容点击、复制等功能都会被阻止,之所以这么做我猜是为了更好地兼容插件自身的功能。
  • preventDefaultException:设置不会被阻止默认事件的dom元素。这个属性就是为了解决preventDefault所带来的影响,我们设置正则表示式去匹配dom元素,比如tagName(标签名)、className(类名)。默认值为 { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|AUDIO)$/},后面跟的必须是正则表达式。
  • refresh():刷新方法。
  • stop():停止方法。
  • scrollToElement():滚动到某个dom元素位置,利用该方法可以做定位跳转功能,接受四个参数: el:目标元素。 time:动画时长。 offsetX:元素x轴偏移量。 offsetY:元素y轴偏移量。 easing:动画移动函数。 下面我们就用该方法做一个跳转的功能,我们在旁边写一个按钮,点击之后自动跳转到第六个div元素。
    <el-button @click="jump">跳转</el-button>
    
   const itemRefs = ref([])
   //点击之后就会滚动出来第六个元素快
   const jump = () => {
  ele.scrollToElement(itemRefs.value[5], 1000, 0)
}

注意代码中v-for与ref结合使用的方式需要v3.2.25及以上的版本。

插件功能

BS适配了移动端与PC端,在PC端可以用鼠标滚轮控制滚动,BS2.0针对滚轮滚动事件拓展了相关功能,除此之外还有下拉刷新等功能,我们需要使用插件来开启这些功能。 插件是2.0从1.0解耦出来的功能,使用时我们需要单独下载依赖包,我们以滚轮为例,先安装:

   yarn add @better-scroll/mouse-wheel

然后引入,用BSroll.use方法去注册插件,在挂载dom时可以设置相关的配置项。

  • speed:设置滚动速度。

  • invert:设置滚轮与滚动跳方向是否一致。

  • dampingFactor:设置阻尼系数,达到真实效果。

  • easeTime:动画时长。

  • discreteTime:检测滚动结束的时间。

  • throttleTime:节流时间,因为滚动是高频事件,可以设置节流时间提升下性能。

    除此之外我们还可以使用scrollbar插件来替换掉浏览器自带的滚动跳,使用方法跟mouse-wheel一样。

import ScrollBar from '@better-scroll/scroll-bar'
BScroll.use(ScrollBar)

我们可以利用这两个插件来丰富滚动功能,直接设置相关的配置项:

    ele = new BScroll(bsRef.value, {
      mouseWheel: {
        speed: 5,
      },
      scrollbar: {
        //渐隐效果
        fade: true,
        // 滚动条交互
        interactive: false,
      },
    })

插件让BS功能更加强大,而且我们还能按需加载对应功能,还是很方便的。

总结

BS让滚动更加方便,如果你想要找一个滚动插件,不妨试一试BS。需要注意的是BS默认对第一个子元素为content监听元素,可以使用specifiedIndexAsContent去配置;BS会阻止元素的默认事件,需要用preventDefault或preventDefaultException去配置。

转载自:https://juejin.cn/post/7265978883123118139
评论
请登录