vue使用better-scroll實(shí)現(xiàn)橫向滾動的方法實(shí)例
一、滾動的實(shí)現(xiàn)原理
better-scroll的滾動原理和瀏覽器原生滾動原理是一樣的,當(dāng)子盒子的高度大于父盒子的高度,就會出現(xiàn)縱向滾動;同理,如果子盒子的寬度大于父盒子的寬度,那么就會出現(xiàn)橫向滾動。
二、better-scroll的 html 結(jié)構(gòu)
先來看一下 better-scroll 常見的 html 結(jié)構(gòu):
<div class="wrapper">
<ul class="content">
<li>...</li>
<li>...</li>
...
</ul>
</div>
BetterScroll應(yīng)用于外部wrapper容器,并且滾動部分是content。請注意,wrapper默認(rèn)情況下,BetterScroll處理容器()的第一個子元素(內(nèi)容)的滾動,這意味著其他元素將被忽略。
三、在Vue中使用better-scroll
npm install better-scroll --save //npm 安裝 import BScroll from 'better-scroll' //組件文件中引入better-scroll
<template>
/* 橫向滾動 */
/* 這里是父盒子*/
<div
class="wrapper_box"
style="min-height:100vh;
"
ref="wrapper"
v-else
>
/* 這里是子盒子,即滾動區(qū)域*/
<div class="content" ref="wrapperChild">
<div
v-for="(item, index) in currentImgList"
:key="index"
class="imgItem"
>
<img :src="item.img" class="img" style="margin: 0 10px;" />
</div>
</div>
</div>
</template>
<script>
import BScroll from "better-scroll";
export default {
data() {
return {
currentImgList: [
{ img: require("../../assets/image/zzb_1.png") },
{ img: require("../../assets/image/zzb_2.png") },
{ img: require("../../assets/image/zzb_3.png") }
],
};
},
mounted() {
this.slide_x(); //橫向滾動
},
methods: {
// 初始化
_initScroll() {
if (!this.scroll) {
this.scroll = new BScroll(this.$refs.wrapper, { // 實(shí)例化BScroll接受兩個參數(shù),第一個為父盒子的dom節(jié)點(diǎn)
startX: 0, /// 配置的詳細(xì)信息請參考better-scroll的官方文檔,這里不再贅述
click: true,
scrollX: true,
scrollY: false, // 忽略豎直方向的滾動
eventPassthrough: "vertical",
useTransition: false // 防止快速滑動觸發(fā)的異常回彈
});
} else {
this.scroll.refresh(); //如果dom結(jié)構(gòu)發(fā)生改變調(diào)用該方法重新計(jì)算來確保滾動效果的正常
}
},
// 計(jì)算寬度
_calculateWidth() {
// 獲取類名為 imgItem 的標(biāo)簽
let rampageList = this.$refs.wrapperChild.getElementsByClassName(
"imgItem"
);
// 設(shè)置一個起始寬度
let initWidth = 0;
// 遍歷標(biāo)簽
for (let i = 0; i < rampageList.length; i++) {
const item = rampageList[i];
// 將每一個標(biāo)簽寬度相加
initWidth += item.clientWidth;
}
// 設(shè)置可滾動的寬度
this.$refs.wrapperChild.style.width = `${initWidth}px`;
},
slide_x() {
this.$nextTick(() => { //this.$nextTick 是一個異步函數(shù),為了確保 DOM 已經(jīng)渲染完畢
this._initScroll(); // 初始化
this._calculateWidth(); // 計(jì)算寬度
});
},
},
};
</script>
下面是插件原作者說的:

四. 容易出現(xiàn)問題的點(diǎn):
- 必須等到頁面DOM渲染完成再去執(zhí)行BScroll的實(shí)例化,建議在mounted 鉤子函數(shù)里執(zhí)行
- 子盒子的寬度大于父盒子的寬度
最后
better-scroll插件作者的文章,發(fā)現(xiàn)better-scroll真強(qiáng)大?。?/p>
在Vue中用better-scroll實(shí)現(xiàn)橫向滾動
到此這篇關(guān)于vue使用better-scroll實(shí)現(xiàn)橫向滾動的文章就介紹到這了,更多相關(guān)vue better-scroll實(shí)現(xiàn)橫向滾動內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Vue實(shí)現(xiàn)跑馬燈樣式文字橫向滾動
- Vue中利用better-scroll組件實(shí)現(xiàn)橫向滾動功能
- Vue替代marquee標(biāo)簽超出寬度文字橫向滾動效果
- Vue中消息橫向滾動時setInterval清不掉的問題及解決方法
- Vue.js+cube-ui(Scroll組件)實(shí)現(xiàn)類似頭條效果的橫向滾動導(dǎo)航條
- vue實(shí)現(xiàn)公告欄文字上下滾動效果的示例代碼
- vue監(jiān)聽滾動事件實(shí)現(xiàn)滾動監(jiān)聽
- Vue.js實(shí)戰(zhàn)之通過監(jiān)聽滾動事件實(shí)現(xiàn)動態(tài)錨點(diǎn)
- vue實(shí)現(xiàn)消息的無縫滾動效果的示例代碼
- vue實(shí)現(xiàn)橫屏滾動公告效果
相關(guān)文章
vue中v-cloak解決刷新或者加載出現(xiàn)閃爍問題(顯示變量)
這篇文章主要介紹了vue中v-cloak解決刷新或者加載出現(xiàn)閃爍問題(顯示變量) ,需要的朋友可以參考下2018-04-04
vue 解決addRoutes動態(tài)添加路由后刷新失效問題
這篇文章主要介紹了vue 解決addRoutes動態(tài)添加路由后刷新失效問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07
vue通過vue-lazyload實(shí)現(xiàn)圖片懶加載的代碼詳解
這篇文章主要給大家介紹了vue通過vue-lazyload實(shí)現(xiàn)圖片懶加載,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02
vant中l(wèi)ist的使用以及首次加載觸發(fā)兩次解決問題
這篇文章主要介紹了vant中l(wèi)ist的使用以及首次加載觸發(fā)兩次解決問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10
Vue實(shí)現(xiàn)點(diǎn)擊圖片放大顯示功能
這篇文章主要為大家詳細(xì)介紹了如何利用Vue實(shí)現(xiàn)點(diǎn)擊圖片放大顯示功能,文中的示例代碼講解詳細(xì),具有一定的參考價值,感興趣的可以了解一下2023-03-03
vue使用directive限制表單輸入整數(shù)、小數(shù)的方法
這篇文章主要介紹了vue使用directive限制表單輸入整數(shù),小數(shù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04

