摘要:當設(shè)置為會派發(fā)一個事件,我們會給派發(fā)的參數(shù)加一個私有屬性,值為。但是自定義的事件會阻止一些原生組件的行為。
安裝
npm install better-scroll --save
引入
import BScroll from "better-scroll"
基礎(chǔ)
better-scroll支持多參數(shù)配置,可以在初始化的時候傳入第二個參數(shù)
let scroll = new BScroll(".wrapper",{
scrollY: true, click: true
})
這樣就實現(xiàn)了一個縱向可點擊的滾動效果
參數(shù)說明:
scrollY:Boolean
當設(shè)置為true的時候,可以開啟縱向滾動
click:Boolean
better-scroll默認會阻止瀏覽器的原生click事件。當設(shè)置為true,better-scroll會派發(fā)一個click事件,
我們會給派發(fā)的event參數(shù)加一個私有屬性_constructed,值為true。
但是自定義的click事件會阻止一些原生組件的行為。
Demo:
實現(xiàn)效果:
滑動右側(cè)左側(cè)對應(yīng)的類別顯示高亮
點擊左側(cè)的類別名稱右側(cè)滑動到對應(yīng)的位置
分析:
(1)高亮顯示通過current類來控制,右側(cè)滑動到不同位置,更新左側(cè)的current顯示
(2)即:實時監(jiān)聽scrollY/將右側(cè)每個類的頂部位置記錄下來
goods.vue
左側(cè)容器:
右側(cè)容器:
...
JS部分:
data部分:
data(){
return { //存放右側(cè)foodWrapper容器中,每一個item(li.food-list-hook)距離頂部的height listHeight:[], //垂直滾動的距離(實時變化的) scrolly:0, //商品列表 goods:[] }
}
初始化部分:
在created方法中需要進行,數(shù)據(jù)的獲取,以及左側(cè)menuWrapper容器和右側(cè)foodWrapper容器的初始化
created(){
//使用vue-resource請求本地數(shù)據(jù),模擬后臺數(shù)據(jù)(注意必須放在static目錄下) this.$http.get("../static/data.json").then( response=>{ //獲取成功之后執(zhí)行 response=response.body; this.goods=response.goods; //為了避免數(shù)據(jù)請求沒有完成,就執(zhí)行foodWrapper和foodWrapper的scroll初始化 //以及計算current高亮位置的方法就已經(jīng)執(zhí)行,其調(diào)用應(yīng)在數(shù)據(jù)獲取成功之后執(zhí)行 this.$nextTick(()=>{ this._initScroll(); this._calculateHeight() }) }, error=>{ console.log("調(diào)用失敗"+error) } )
}
methods
_initScroll初始化,實現(xiàn)滾動
_initScroll(){
//初始化左側(cè)滾動(滑動類默認是沒有點擊的,必須加上click:true才能觸發(fā)事件) this.menuScroll=new BScroll(this.$refs.menuWrapper,{ click:true }) //創(chuàng)建右側(cè)的滾動 /* probeType:Number 默認值0 可選值:1、2、3 作用: 有時候我們需要知道滾動的位置。當probeType為1的時候,會非實時(屏幕滑動超過一定時間后) 派發(fā)scroll事件;當probeType為2時,會在屏幕滑動的過程中實時的派發(fā)scroll事件 當probeType為3的時候,不僅在屏幕滑動的過程中, 而且在momentum滾動動畫運行過程中實時派發(fā)scroll事件 */ this.foodScroll=new BScroll(this.$refs.foodWrapper,{ probeType:3 click:true }); //為右側(cè)foodWrapper綁定scroll事件 this.foodScroll.on("scroll",(pos)=>{ //scrolly中存放實時滾動的坐標 this.scrolly=Math.abs(Math.round(pos.y)); })
}
_calculateHeight計算每一個item(li.food-list-hook)距離頂部的height
點擊左側(cè)菜單,右側(cè)滾動到對應(yīng)的位置
selectMenu(index,event){
//index與foodWrapper中每個li.food-list-hook的index相對應(yīng) //首先去掉better-scroll自帶的點擊事件 if(!event._constructed){ return; } //獲取所有的li.food-list-hook let foodList=this.$refs.foodWrapper.getElementsByClassName( "food-list-hook" ); //與左側(cè)點擊元素的下標相對應(yīng)的右側(cè)的某個li.food-list-hook let el=foodList[index]; //執(zhí)行點擊后滾動到對應(yīng)元素的操作 this.foodScroll.scrollToElement(el,300);
}
關(guān)于左側(cè)menu current高亮位置的計算
computed:{
currentIndex(){ for(let i=0;iheight&&this.scrolly }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/106458.html
摘要:它的核心是借鑒的的實現(xiàn),它的設(shè)計基本兼容,在的基礎(chǔ)上又擴展了一些以及做了一些性能優(yōu)化。注銷后,就清除里的信息并跳轉(zhuǎn)到登錄頁面 1 stylus 預(yù)處理 項目文件assets目錄下新建stylus文件夾,新建 *.styl文件: showImg(https://segmentfault.com/img/bVbqy2M);variable.styl 存儲公共樣式,iconfont.sty...
摘要:基于等開發(fā)一款移動端音樂,界面參考了安卓版的網(wǎng)易云音樂布局適配常見移動端。圖標使用阿里巴巴圖標庫,中間的唱片旋轉(zhuǎn)動畫使用了實現(xiàn)。搜索功能實現(xiàn)功能搜索歌手歌單歌曲熱門搜索數(shù)據(jù)節(jié)流上拉刷新保存搜索記錄。 基于 Vue(2.5) + vuex + vue-router + vue-axios +better-scroll + Scss + ES6 等開發(fā)一款移動端音樂 WebApp,UI ...
閱讀 771·2021-11-11 16:54
閱讀 3098·2021-09-26 09:55
閱讀 2042·2021-09-07 10:20
閱讀 1231·2019-08-30 10:58
閱讀 1073·2019-08-28 18:04
閱讀 724·2019-08-26 13:57
閱讀 3624·2019-08-26 13:45
閱讀 1184·2019-08-26 11:42