vue3用better-scoll

214 阅读1分钟
<div class="container">
    <ul class="list">
        <li 
        v-for="(item,index) in list"
        :key="index"
        class="list-item">
            {{item}}
        </li>
    </ul>
</div>
<button @click="up">up</button>
<button @click="dowm">dowm</button>
</template>

<script setup>
// 导入vue3的api
import { onMounted,ref,nextTick } from 'vue'
// 导入better-scroll组件
import Bscroll from 'better-scroll'
// 声明变量
const list = ref([])
// 声明better-scroll的初始化对象
const btS = ref(null)
// 用一个异步来模拟初始化数据
const initList = ()=>{
    return new Promise((resolve)=>{
        setTimeout(()=>{
            for(let i = 0; i < 100;i++){
                list.value.push(i)
            }
            resolve()
        },3000)
    })
}
// 调用better-scroll的实例化对象btS的api来控制
const up = () => {
    if(btS.value.y  == 0){
        return console.log(btS.value.y)
    }
    btS.value.scrollBy(0,50,300)
}
const dowm = () => {
    btS.value.scrollBy(0,-50,300)
}

onMounted( ()=>{
    initList().then(async ()=>{
    // 在数据初始化之后,更新完dom之后才能初始化btScroll
         await nextTick()
         // 传入list的父容器.container,初始化对象用btS来接收
         btS.value = new Bscroll('.container')
    })
})

</script>

<style lang="less" scoped>
// list的父容器必须要有固定的宽高,并且overflow要是hidden
.container{
    height: 500px;
    overflow: hidden;
}
</style>

要点:
1.必须给list一个父容器,并且这个父容器的宽高要固定,overflow要是hidden
2.要等数据初始化之后,等list有一个固定宽高之后才能够初始化better-scroll
3.初始化better-scroll传入的dom参数是list的父容器