成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

vue使用better-scroll實現滑動以及左右聯動

瀏覽:59日期:2023-01-10 10:54:49

本文實例為大家分享了vue實現滑動以及左右聯動效果的具體代碼,供大家參考,具體內容如下

一、首先需要在項目中引入better-scroll

1. 在package.json 直接寫入 'better-scroll':'^1.15.1' 版本以github上為準(目前最新)

2.cpnm install 在node_modules 可以查看版本是否安裝

3.直接在你的組件里面寫入import BScroll from ’better-scroll’;

二、better-scroll優點

1.體驗像原生:滾動非常流暢,而且沒有滾動條。

2.滾動位置固定:在vue中通過路由切換頁面時組件會自動滾動到頂部,需要監聽滾動行為才能讓滾動位置固定,better-scroll解決了這個問題。

三、下面是在項目中的使用

移動端很常見的效果,當滑動右邊部分的時候,左邊會聯動顯示與當前內容相符合的標題高亮,當點擊左邊某一個標題的時候,右邊會自動滑動到相應的內容。

項目如下圖:

vue使用better-scroll實現滑動以及左右聯動

實現及說明

1.滾動效果

better-scroll在使用的時候需要在dom元素渲染完成之后初始化better-scroll的實例,初始化的時候,先要獲取需要滑動的元素,然后在初始化的時候將獲取到的元素傳遞給初始化函數,此時便可實現滑動效果

2.左右聯動效果

左右聯動效果的實現,是better-scroll通過監聽事件實現的。

首先獲取到右邊內容盒子的高度,然后獲取到該盒子中每一項的高度并做前n項高度累加(第n項的高度是前n項的高度和)存儲到listHeight數組中。在初始化的時候傳遞屬性probeType=3 (探針的效果,時時獲取滾動高度),并給右邊的內容盒子對象監聽scroll事件,從而時時獲取Y軸位置,來與listHeight數組中的數據做比較,時時計算當前的索引值,并給對邊對應索引值的項添加背景色高亮,從而實現右邊滑動,聯動左邊。

當點擊左邊的每一項的時候,獲取到當前的索引值,并根據當前的索引值獲取到與右邊內容盒子中對應索引的元素,右邊的盒子元素通過監聽scrollToElement,并傳遞獲取到的對應索引元素和動畫時間,從而實現點擊左邊,實現右邊聯動;

實現代碼如下:

<template> <section class='box'> <div class='head'> head </div> <div class='content'> <div ref='left'> <ul> <li v-for='(item, index) in left' :key='item' : @click='selectItem(index, $event)'> <span class='left-item'>{{item}}</span> </li> </ul> </div> <div ref='right'> <ul> <li v-for='item in right' :key='item.name'> <h2>{{item.name}}</h2> <ul> <li v-for='num in item.content' :key='num.name'> <div>{{item.name+num}}</div> </li> </ul> </li> </ul> </div> </div> </section></template><script>import BScroll from ’better-scroll’export default { data () { return { left: [’a’, ’b’, ’c’, ’d’, ’e’, ’f’], right: [ { name: ’a’, content: [’1’, ’2’, ’3’, ’4’, ’5’] }, { name: ’b’, content: [’1’, ’2’, ’3’, ’4’, ’5’] }, { name: ’c’, content: [’1’, ’2’, ’3’, ’4’, ’5’] }, { name: ’d’, content: [’1’, ’2’, ’3’, ’4’, ’5’] }, { name: ’e’, content: [’1’, ’2’, ’3’, ’4’, ’5’] }, { name: ’f’, content: [’1’, ’2’, ’3’, ’4’, ’5’] }, ], listHeight: [], scrollY: 0, //實時獲取當前y軸的高度 clickEvent: false } }, methods: { _initScroll () { //better-scroll的實現原理是監聽了touchStart,touchend事件,所以阻止了默認的事件(preventDefault) //所以在這里做點擊的話,需要在初始化的時候傳遞屬性click,派發一個點擊事件 //在pc網頁瀏覽模式下,點擊事件是不會阻止的,所以可能會出現2次事件,所以為了避免2次,可以在綁定事件的時候把$event傳遞過去 this.lefts = new BScroll(this.$refs.left, { click: true }) this.rights = new BScroll(this.$refs.right, { probeType: 3 //探針的效果,實時獲取滾動高度 }) //rights這個對象監聽事件,實時獲取位置pos.y this.rights.on(’scroll’, (pos) => { this.scrollY = Math.abs(Math.round(pos.y)) }) }, _getHeight () { let rightItems = this.$refs.right.getElementsByClassName(’right-item-hook’) let height = 0 this.listHeight.push(height) for(let i = 0; i < rightItems.length; i++){ let item = rightItems[i] height += item.clientHeight this.listHeight.push(height) } }, selectItem(index,event){ this.clickEvent = true //在better-scroll的派發事件的event和普通瀏覽器的點擊事件event有個屬性區別_constructed //瀏覽器原生點擊事件沒有_constructed所以當時瀏覽器監聽到該屬性的時候return掉 if(!event._constructed){ return }else{ let rightItems = this.$refs.right.getElementsByClassName(’right-item-hook’) let el = rightItems[index] this.rights.scrollToElement(el, 300) } } }, mounted () { this.$nextTick(() => { this._initScroll() this._getHeight() }) }, computed: { currentIndex () { for(let i = 0; i < this.listHeight.length; i ++){ let height = this.listHeight[i] let height2 = this.listHeight[i + 1] //當height2不存在的時候,或者落在height和height2之間的時候,直接返回當前索引 //>=height,是因為一開始this.scrollY=0,height=0 if(!height2 || (this.scrollY >= height && this.scrollY < height2)){ return i } if(this.listHeight[this.listHeight.length - 1] - this.$refs.right.clientHeight <= this.scrollY){ if(this.clickTrue){ return this.currentNum }else{ return (this.listHeight.length - 1) } } } //如果this.listHeight沒有的話,就返回0 return 0 } }}</script><style scoped>.content{ display: flex; position: absolute; top:100px; bottom:100px; width:100%; overflow: hidden; background: #eee;}.left{ flex: 0 0 80px; width:80px; background-color: #f3f5f7;} .left li{ width: 100%; height: 100%; } .current{ background-color: red; } .left-item{ display: block; width:100%; height:100px; line-height: 50px; text-align: center; border-bottom:1px solid yellow; } .right{ flex: 1; } .right-item li{ width:100%; height:100px; line-height:100px; text-align: center; border-bottom: 1px solid yellow; } *{ list-style: none; margin: 0; padding: 0; }</style>

關于vue.js組件的教程,請大家點擊專題vue.js組件學習教程進行學習。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Vue
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
色狠狠av一区二区三区| 国产在线国偷精品免费看| 日本免费新一区视频| 欧洲一区二区三区在线| 国产91对白在线观看九色| 欧美第一区第二区| 成人午夜大片免费观看| 国产日本欧洲亚洲| 亚洲国产精选| 亚洲国产精品天堂| 在线观看日韩电影| 国产在线精品二区| 亚洲精品日韩专区silk| 色婷婷久久久综合中文字幕 | 色综合天天在线| 国产日韩一级二级三级| 欧美视频三区在线播放| 处破女av一区二区| 日韩va亚洲va欧美va久久| 国产精品大尺度| 一本在线高清不卡dvd| 黄色成人在线网址| 免费成人小视频| 精品裸体舞一区二区三区| 欧美日韩亚洲国产精品| 亚洲动漫第一页| 国产精品久久久久四虎| 亚洲精品一区二区三区四区高清| 亚洲最黄网站| 亚洲男帅同性gay1069| 久久精品电影| 国产成人超碰人人澡人人澡| 综合色天天鬼久久鬼色| 欧美无人高清视频在线观看| 亚洲一区二区免费看| 国产精品18久久久久久久久久久久 | 欧美日韩国产在线播放网站| 成人久久久精品乱码一区二区三区| 午夜私人影院久久久久| 精品国产123| 欧美日韩国产中文| 久久精品免费| 亚洲综合欧美| 国产欧美日韩亚洲| 在线国产欧美| 国产精品一二三| 欧美bbbbb| 日韩精品一级二级| 久久一区二区三区四区| 久久精品男女| 在线欧美亚洲| 国内精品久久国产| 欧美国产综合| 麻豆精品新av中文字幕| 久久精品亚洲国产奇米99| 亚洲欧美日韩精品久久久| 国产成都精品91一区二区三| 蜜臀av一区二区在线观看| 五月开心婷婷久久| 亚洲成人免费av| 欧美高清一级片在线观看| 欧美视频一二三区| 91福利视频久久久久| 午夜在线a亚洲v天堂网2018| 国产乱码精品| 亚洲一区影院| 国产精品日韩一区二区| 不卡一区二区在线| 亚洲成av人片| 亚洲mv大片欧洲mv大片精品| 亚洲成年人影院| 日韩精品亚洲专区| 免费av网站大全久久| 麻豆国产精品官网| 精品一区二区三区久久| 亚洲免费色视频| 亚洲女子a中天字幕| 亚洲免费看黄网站| 亚洲综合无码一区二区| 久久夜色精品一区| 久久久久久夜精品精品免费| 精品视频999| 1024日韩| 一区二区高清视频| 久久精品道一区二区三区| 91黄色免费版| 欧美日韩国产美女| 欧美一级免费观看| 亚洲丝袜自拍清纯另类| 一区二区中文视频| 久久久久久亚洲综合| 国产欧美一区二区三区在线老狼 | 国产偷国产偷亚洲高清97cao| 性一交一乱一区二区洋洋av| 色悠悠久久综合| 欧美日韩黄视频| 欧美一区二区三区思思人| 欧美不卡一二三| 国产亚洲1区2区3区| 中文文精品字幕一区二区| 欧美肥妇毛茸茸| 久久这里只有| 国产日韩欧美一区在线| 国产精品视频免费一区| 在线免费观看日本欧美| 91麻豆精品国产无毒不卡在线观看| 久久岛国电影| 日本道精品一区二区三区| 欧美日韩国产三级| 欧美精品一区二| 中文字幕中文字幕在线一区 | 91在线高清观看| 黄页视频在线91| 日韩高清国产一区在线| 紧缚捆绑精品一区二区| 成人综合在线观看| 女同一区二区| 亚洲综合不卡| 欧美一区二区在线不卡| 国产欧美日韩另类视频免费观看| 国产精品国产自产拍在线| 亚洲一区二区在线播放相泽| 麻豆一区二区在线| av亚洲精华国产精华精华| 国产精品一区二区视频| www.欧美色图| 亚洲精品国产精品国自产观看| 久久黄色网页| 日韩一区二区中文字幕| 国产精品电影一区二区三区| 五月婷婷综合网| 国产99一区视频免费| 国内精品美女在线观看| 色综合久久久久久久久久久| 欧美成人女星排名| 中文字幕中文乱码欧美一区二区| 日韩影院精彩在线| 暴力调教一区二区三区| 亚洲一卡久久| 日韩精品一区二区三区在线播放 | 欧美区一区二| 91看片淫黄大片一级在线观看| 在线欧美日韩| 欧美伦理电影网| 国产精品国模大尺度视频| 日韩高清一级片| 91免费观看视频| 久久精品五月| 26uuu欧美| 亚洲bdsm女犯bdsm网站| 成人av电影在线网| 亚洲在线网站| 亚洲精品一区二区三区精华液| 一区二区在线观看视频| 国产精品自在欧美一区| 亚洲激情婷婷| 欧美一区二区三区公司| 亚洲欧美另类久久久精品2019| 韩国三级中文字幕hd久久精品| 国产在线日韩| 欧美三级视频在线| 中文字幕一区二区三区在线观看| 久久精品99国产精品日本| 国内精品久久久久影院薰衣草| 亚洲欧美一级二级三级| 色94色欧美sute亚洲线路一ni| 久久久不卡网国产精品一区| 日韩精品久久理论片| 欧美bbbxxxxx| 欧美午夜影院一区| 国产精品久久久久久久岛一牛影视| 久久99精品久久久久婷婷| 国一区二区在线观看| 欧美精品乱码久久久久久按摩 | 免费在线亚洲欧美| 26uuu国产日韩综合| 日本一区中文字幕| 欧美日本韩国一区二区三区| 欧美色综合久久| 一区二区三区四区蜜桃| 婷婷丁香激情综合| 欧美成人免费在线| 欧美日韩国产小视频| 一区二区欧美国产| 97se亚洲国产综合自在线不卡| 韩日欧美一区| 69堂亚洲精品首页| 亚洲二区在线观看| 欧美日韩1080p| 5858s免费视频成人| 一区二区三区日韩精品| 91在线观看美女| 欧美高清性hdvideosex| 亚洲一区二区3| 欧美一区精品| 777久久久精品| 五月婷婷激情综合网| 亚洲性图久久| 精品欧美一区二区在线观看| 欧美aaa在线|