其他分享
首页 > 其他分享> > 基于Vue的Better-Scroll组件封装

基于Vue的Better-Scroll组件封装

作者:互联网

基于Vue的Better-Scroll组件封装

介绍:在我们日常的移动端项目开发中,处理滚动列表是再常见不过的需求了,可以是竖向滚动的列表,也可以是横向的,用better-scroll可以帮助我们实现这个。

Scroll组件

<template>
    <div class="wrapper" ref="wrapper">
        <div class="content">
            <slot></slot>
        </div>

    </div>
</template>

<script>
import BScroll from '@better-scroll/core'
import Pullup from '@better-scroll/pull-up'
BScroll.use(Pullup)
export default {
    props: {
        top: {
            type: Number,
            default: 0
        },
        // list: {
        //     type: Array,
        //     required: true
        // },
        probeType:{
            type:Number,
            default: 0
        },
        pullUpLoad:{
            type:Boolean,
            default: false
        }
    },
    data(){
        return{
            scroll:null
        }
    },
    methods: {
        finishPullUp(){
            this.scroll && this.scroll.finishPullUp();
        },
        refresh() {
            this.scroll && this.scroll.refresh();
            // console.log('==========')
        },
        scrollTo(x,y,time=300){
            this.scroll.scrollTo(x,y,time)
        }
    },
    mounted() {
        this.$refs.wrapper.style.top = this.top + 'px';
        this.scroll = new BScroll(this.$refs.wrapper, {
            click: true,
            probeType:this.probeType,
            pullUpLoad: this.pullUpLoad,
        });
        //监听滚动的位置
        if(this.probeType === 2 || this.probeType === 3){
            this.scroll.on('scroll',(position)=>{
                this.$emit('scroll',position)
            })
        }

    //    监听上拉加载事件
        if (this.pullUpLoad){
            this.scroll.on('pullingUp',()=>{
                this.$emit('pullingUp')
            })
        }



    },
    // watch: {
    //     list() {
    //         this.$nextTick(() => {
    //             this.refresh();
    //         })
    //     }
    // }
}
</script>

<style>
.wrapper {
    position: absolute;
    overflow: hidden;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
}
</style>

probeType

// 派发 scroll 的场景分为两种:
// 1. 手指作用在滚动区域(content DOM)上;
// 2. 调用 scrollTo 方法或者触发 momentum 滚动动画(其实底层还是调用 scrollTo 方法)

// 1. probeType 为 0,在任何时候都不派发 scroll 事件,
// 2. probeType 为 1,仅仅当手指按在滚动区域上,每隔 momentumLimitTime 毫秒派发一次 scroll 事件,
// 3. probeType 为 2,仅仅当手指按在滚动区域上,一直派发 scroll 事件,
// 4. probeType 为 3,任何时候都派发 scroll 事件,包括调用 scrollTo 或者触发 momentum 滚动动画

finishPullUp()

refresh()

scrollTo(x,y,time)

Scroll组件的使用

	import Scroll from "@/components/common/Scroll/Scroll";
 <scroll :top="44"
                ref="BScroll"
                :probe-type="3"
                @scroll="contentScroll"
                :pull-up-load="true"
                @pullingUp="loadMore">
<!--            要滚动的组件-->
        </scroll>

标签:better,Vue,滚动,probeType,scrollTo,scroll,Better,Scroll
来源: https://blog.csdn.net/qq_45118257/article/details/116722016