better-scroll快速上手及封装(vue项目)

  • A+
所属分类:Web前端
摘要

愿你有诗有梦,有坦荡荡的远方本文声明:这是一篇学习coderwhy老师的vue2课程的一个笔记,所以本文章是在vue项目中实现,没学过vue的大佬们可以举一反三。


愿你有诗有梦,有坦荡荡的远方

本文声明:这是一篇学习coderwhy老师的vue2课程的一个笔记,所以本文章是在vue项目中实现,没学过vue的大佬们可以举一反三。

使用场景及介绍

BetterScroll 是一款重点解决移动端(已支持 PC)各种滚动场景需求的插件。它的核心是借鉴的iscroll的实现,它的 API 设计基本兼容 iscroll,在 iscroll 的基础上又扩展了一些 feature 以及做了一些性能优化。
BetterScroll 是使用纯 JavaScript 实现的,这意味着它是无依赖的。

安装

npm install @better-scroll/core --save

基本使用

<div class="wrapper" ref="wrapper"> <ul class="scroll-content"> ... </ul> </div>

data() { return { scroll: null, }; }, mounted() {//不用created,因为那时候还没将元素放上去 this.scroll = new betterScroll(this.$refs.wrapper,{ // ...... 详见配置项 }); }, ...

better-scroll快速上手及封装(vue项目)

 

 

 

常见配置项

1. click

  • 类型:boolean
  • 默认值:false
  • 作用:BetterScroll 默认会阻止浏览器的原生 click 事件。当设置为 true,BetterScroll 会派发一个 click 事件,我们会给派发的 event 参数加一个私有属性 `_constructed`,值为 true。

2. probeType

  • 类型:number
  • 默认值:0
  • 可选值:1|2|3
  • 作用:决定是否派发 scroll 事件,对页面的性能有影响,尤其是在 `useTransition` 为 true 的模式下。

 

// 派发 scroll 的场景分为两种: // 1. 手指作用在滚动区域(content DOM)上; // 2. 调用 scrollTo 方法或者触发 momentum 滚动动画(其实底层还是调用 scrollTo 方法)  // 对于 v2.1.0 版本,对 probeType 做了一次统一  // 1. probeType 为 0,在任何时候都不派发 scroll 事件, // 2. probeType 为 1,仅仅当手指按在滚动区域上,每隔 momentumLimitTime 毫秒派发一次 scroll 事件, // 3. probeType 为 2,仅仅当手指按在滚动区域上,一直派发 scroll 事件, // 4. probeType 为 3,任何时候都派发 scroll 事件,包括调用 scrollTo 或者触发 momentum 滚动动画

3. pullUpLoad

  • 类型:Boolean | Object
  • 默认值:false
  • 作用:这个配置用于做上拉加载功能,默认为 false。当设置为 true 或者是一个 Object 的时候,可以开启上拉加载,例如:

 

pullUpLoad:true,//相当于pullUpLoad:{ threshold:0 }

可以配置离(`threshold`)来决定开始加载的时机。

封装成一个独立组件

<template> <div ref="wrapper" class="wrapper"> <div> <slot></slot> </div> </div> </template>  <script> import BScroll from "better-scroll"; export default { name: "BetterScroll", data() { return { bs: null, }; }, props: { probeType: { type: Number, default: 0, }, pullUpLoad: { type: Boolean, default: false, }, }, mounted() { setTimeout(() => { this.bs = new BScroll(this.$refs.wrapper, { probeType: this.probeType, click: true, pullUpLoad: this.pullUpLoad, }); this.bs.on("scroll", (option) => { this.$emit("scroll", option); }); this.bs.on("pullingUp", () => { this.$emit("pullingUp"); setTimeout(() => { this.bs.finishPullUp(); }, 2000); }); }, 1000); }, methods: { scrollTo(x, y, time = 500) { this.bs&&this.bs.scrollTo(x, y, time); }, refresh(){ this.bs&&this.bs.refresh(); } }, }; </script>  <style scoped> .wrapper { overflow: hidden; } </style>

使用组件

import betterScroll from "better-scroll";

<better-scroll :probeType="3" :pullUpLoad="true" @scroll="contentScroll" @pullingUp="contentPullingUp" >

做世界的水手,奔赴所有的港口