欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

使用better-scroll實現左右聯動的方法-創(chuàng)新互聯

創(chuàng)新互聯www.cdcxhl.cn八線動態(tài)BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!

站在用戶的角度思考問題,與客戶深入溝通,找到黃龍網站設計與黃龍網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:做網站、成都網站建設、企業(yè)官網、英文網站、手機端網站、網站推廣、國際域名空間、雅安服務器托管、企業(yè)郵箱。業(yè)務覆蓋黃龍地區(qū)。

這篇文章主要介紹使用better-scroll實現左右聯動的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

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

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

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

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

二、better-scroll優(yōu)點

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

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

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

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

項目如下圖:

使用better-scroll實現左右聯動的方法

實現及說明

1.滾動效果

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

2.左右聯動效果

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

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

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

實現代碼如下:

<template>
 <section class="box">
 <div class="head">
 head
 </div>
 <div class="content">
 <div class="left" ref="left">
 <ul>
  <li v-for="(item, index) in left" :key="item" :class="{current: currentIndex == index}" @click="selectItem(index, $event)">
  <span class="left-item">{{item}}</span>
  </li>
 </ul>
 </div>
 <div class="right" ref="right">
 <ul>
  <li class="right-item right-item-hook" v-for="item in right" :key="item.name">
  <h3>{{item.name}}</h3>
  <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的實現原理是監(jiān)聽了touchStart,touchend事件,所以阻止了默認的事件(preventDefault)
 //所以在這里做點擊的話,需要在初始化的時候傳遞屬性click,派發(fā)一個點擊事件
 //在pc網頁瀏覽模式下,點擊事件是不會阻止的,所以可能會出現2次事件,所以為了避免2次,可以在綁定事件的時候把$event傳遞過去
 this.lefts = new BScroll(this.$refs.left, {
 click: true
 })
 this.rights = new BScroll(this.$refs.right, {
 probeType: 3 //探針的效果,實時獲取滾動高度
 })
 //rights這個對象監(jiān)聽事件,實時獲取位置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的派發(fā)事件的event和普通瀏覽器的點擊事件event有個屬性區(qū)別_constructed
 //瀏覽器原生點擊事件沒有_constructed所以當時瀏覽器監(jiān)聽到該屬性的時候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>

文章題目:使用better-scroll實現左右聯動的方法-創(chuàng)新互聯
標題鏈接:http://aaarwkj.com/article8/gjoop.html

成都網站建設公司_創(chuàng)新互聯,為您提供面包屑導航、網站策劃、電子商務、網站設計手機網站建設、定制網站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

成都定制網站建設
欧美一区二区精品少妇| 黄色大片黄色大片黄色大片| 国产一区二区三区av| 高清免费在线自偷自拍| 99热只有这里才有精品| 黑丝美女被内射视频免费观看| 亚洲精品免费一区二区三区| 亚洲国模av一区二区三区| av成人资源一区久久| 亚洲中文字幕在线不卡| 午夜射精视频在线观看| 免费爱爱视频在线观看| 婷婷五五月深爱开心激情| 色综合av男人的天堂| 一级片高清在线观看国产 | 亚洲欧美日韩国产精品专区| 国产精品黄色自拍合集| 关于男女性生活的视频| 亚洲视频免费在线一区| 亚洲综合美女极品啪啪啪| 麻豆AV一区二区三区久久| 男人喜欢看的免费视频| 亚洲精品中文字幕日本乱码| 日韩一区二区三区av观看| 五月婷婷av综合激情| 日日躁夜夜躁狠狠躁黑人| 国产白浆一区二区视频| 欧美一区二区黑人巨大| 亚洲黄色一区大陆av剧情| 激情五月婷婷我有我色 | 人人爽人人妻人人澡| 神马影院在线观看午夜| av网址在线免费观看| 亚洲图文一区二区三区四区 | 亚洲黄色成人在线观看| 欧美国产日韩一区二区三区视频| 蜜臀一二区免费在线视频| 美女福利视频一区二区| 国产剧情av在线资源| 中文字幕一区二区三区三级| 国产亚洲精品久久综合阿香 |