vue使用better-scroll實現(xiàn)橫向滾動的方法實例
一、滾動的實現(xiàn)原理
better-scroll的滾動原理和瀏覽器原生滾動原理是一樣的,當子盒子的高度大于父盒子的高度,就會出現(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應用于外部wrapper容器,并且滾動部分是content。請注意,wrapper默認情況下,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, { // 實例化BScroll接受兩個參數(shù),第一個為父盒子的dom節(jié)點 startX: 0, /// 配置的詳細信息請參考better-scroll的官方文檔,這里不再贅述 click: true, scrollX: true, scrollY: false, // 忽略豎直方向的滾動 eventPassthrough: "vertical", useTransition: false // 防止快速滑動觸發(fā)的異?;貜? }); } else { this.scroll.refresh(); //如果dom結(jié)構(gòu)發(fā)生改變調(diào)用該方法重新計算來確保滾動效果的正常 } }, // 計算寬度 _calculateWidth() { // 獲取類名為 imgItem 的標簽 let rampageList = this.$refs.wrapperChild.getElementsByClassName( "imgItem" ); // 設(shè)置一個起始寬度 let initWidth = 0; // 遍歷標簽 for (let i = 0; i < rampageList.length; i++) { const item = rampageList[i]; // 將每一個標簽寬度相加 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(); // 計算寬度 }); }, }, }; </script>
下面是插件原作者說的:
四. 容易出現(xiàn)問題的點:
- 必須等到頁面DOM渲染完成再去執(zhí)行BScroll的實例化,建議在mounted 鉤子函數(shù)里執(zhí)行
- 子盒子的寬度大于父盒子的寬度
最后
better-scroll插件作者的文章,發(fā)現(xiàn)better-scroll真強大??!
在Vue中用better-scroll實現(xiàn)橫向滾動
到此這篇關(guān)于vue使用better-scroll實現(xiàn)橫向滾動的文章就介紹到這了,更多相關(guān)vue better-scroll實現(xiàn)橫向滾動內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Vue實現(xiàn)跑馬燈樣式文字橫向滾動
- Vue中利用better-scroll組件實現(xiàn)橫向滾動功能
- Vue替代marquee標簽超出寬度文字橫向滾動效果
- Vue中消息橫向滾動時setInterval清不掉的問題及解決方法
- Vue.js+cube-ui(Scroll組件)實現(xiàn)類似頭條效果的橫向滾動導航條
- vue實現(xiàn)公告欄文字上下滾動效果的示例代碼
- vue監(jiān)聽滾動事件實現(xiàn)滾動監(jiān)聽
- Vue.js實戰(zhàn)之通過監(jiān)聽滾動事件實現(xiàn)動態(tài)錨點
- vue實現(xiàn)消息的無縫滾動效果的示例代碼
- vue實現(xiàn)橫屏滾動公告效果
相關(guān)文章
使用Vue Composition API寫出清晰、可擴展的表單實現(xiàn)
這篇文章主要介紹了使用Vue Composition API寫出清晰、可擴展的表單實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06詳解Vue-cli webpack移動端自動化構(gòu)建rem問題
這篇文章主要介紹了詳解Vue-cli webpack移動端自動化構(gòu)建rem問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04Vue+Node實現(xiàn)商品列表的分頁、排序、篩選,添加購物車功能詳解
這篇文章主要介紹了Vue+Node實現(xiàn)商品列表的分頁、排序、篩選,添加購物車功能,結(jié)合實例形式分析了vue.js前臺商品分頁、排序、篩選等功能及后臺node.js處理技巧,需要的朋友可以參考下2019-12-12el-table表格動態(tài)合并相同數(shù)據(jù)單元格(可指定列+自定義合并)
工作時遇到的el-table合并單元格的需求,本文主要介紹了el-table表格動態(tài)合并相同數(shù)據(jù)單元格(可指定列+自定義合并),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07