1.下载安装better-scroll

npm i -S better-scroll

1.1安装完成之后,打开pacaage.json文件查看,是否有(better-scroll)

"dependencies": {
    "axios": "^0.19.0",
    //已安装better-scroll
    "better-scroll": "^1.15.2",
    "core-js": "^2.6.5",
    "vue": "^2.6.10",
    "vue-router": "^3.0.3",
    "vuex": "^3.0.1"
  },

2.在components下创建组件Scrooller

<template>
    <div class="wrapper" ref="wrapper">
        <!-- 内容分发 -->
        <slot></slot>
    </div>
</template>

<script>
import BScroll from 'better-scroll';
    export default {
        name: 'Scroller',
        // 父子通信
        props : {
            handleToScroll : {
                type : Function,
                // 默认一个空的方法 防止报错
                default : function(){},
            },
            handleToTouchEnd : {
                type:Function,
                default: function(){}
            }
        },
        mounted(){
              //接收两个参数 1.找到最外层包裹的容器 dom元素 2.配置元素 true 开启配置
            var scroll = new BScroll( this.$refs.wrapper,{
                tap:true,
                probeTybe: 1
            });

            scroll.on('scroll',(pos) => {
                this.handleToScroll(pos);
            });

            scroll.on('touchEnd',(pos) => {
                this.handleToTouchEnd(pos);
            })
        }
    }
</script>

<style scoped>
    .wrapper{
        height: 100%;
    }
</style>

2.1在main.js中全局注册Scroller

// scroller全局组件
import Scroller from '@/components/Scroller/Scroller.vue'
Vue.component('Scroller',Scroller);

3.在views中引入Scroller组件

<template>
    <div class="movie_body" ref="movie_body">
        <!-- 父子间传递方法 -->
        <Scroller :handleToScroll="handleToScroll" :handleToTouchEnd="handleToTouchEnd">
            <ul>
                <li class="pulldown">内容</li>
            </ul>
        </Scroller>
    </div>
</template>
<script>
// import BScroll from 'better-scroll';

    export default {
        name: 'name',
        data(){
            return {

                movieList : [],
                //加载状态
                pullDownMsg : ''
            }
        },
        mounted(){
            this.axios.get('接口').then((res) => {
               //处理数据并赋值给movieList
            })
        },
        methods:{
            //调用组件中的方法
            handleToScroll(pos){
              //y轴下拉高度大于30时,改变pullDownMsg
                if( pos.y > 30){
                    this.pullDownMsg = '正在加载...'
                }
            },
          //调用组件中的方法
            handleToTouchEnd(pos){
                if(pos.y > 30){
                    // 发起ajax
                    this.axios.get(’接口').then((res) => {
                        var msg = res.data.msg;
                        if(msg === 'ok'){
                            this.pullDownMsg = '加载完成!';
                            //延迟一秒
                            setTimeout(() =>{
                                this.movieList = res.data.list;
                                this.pullDownMsg = ''
                            },1000)
                        }
                    })
                }
            }
        }
    }
</script>                                       
02-13 20:26