麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

vue和better-scroll實現列表左右聯動效果詳解

2019-11-19 11:40:50
字體:
來源:轉載
供稿:網友

一.實現思路

  1. (1)實現上是左右分別一個better-scroll列表
  2. (2)利用計算右側列表每一個大區塊的高度來計算左側的位置

二.實現

1.實現左右兩個better-scroll

(1)dom結構(better-scroll要求,會把最外層dom的第一個子元素作為要滾動的區域)

左邊滾動列表dom <div class="menu-wrapper" v-el:menu-wrapper>   <ul>    <li v-for="item in goods" class="menu-item"      :class="{'current':currentIndex === $index}"      @click="selectMenu($index,$event)">     <span class="text border-1px">      <span v-show="item.type > 0" class="icon"       :class="classMap[item.type]"></span>{{item.name}}     </span>    </li>   </ul>  </div>右邊滾動列表dom<div class="food-wrapper" v-el:food-wrapper>   <ul>    <li v-for="item in goods" class="food-list food-list-hook">     <h1 class="title">{{item.name}}</h1>     <ul>      <li v-for="food in item.foods" class="food-item border-1px">       <div class="icon">        <img width="57" height="57" :src="food.icon">       </div>       <div class="content">        <h2 class="name">{{food.name}}</h2>        <p class="desc">{{food.description}}</p>        <div class="extra">         <span class="count">月售{{food.sellCount}}份</span>         <span>好評率{{food.rating}}%</span>         <div class="price">          <span class="now">¥{{food.price}}</span>          <span class="old" v-show="food.oldPrice">¥{{food.oldPrice}}</span>         </div>        </div>       </div>      </li>     </ul>    </li>   </ul>  </div>

在數據請求完成后的$nextTick中初始化better-scroll,就能實現兩個列表分別能滾動,至于聯動,要后面自己做

_initScroll() {    this.menuScroll = new BScroll(this.$els.menuWrapper,{     click:true  //允許better-scroll列表上的點擊事件    });    this.foodsScroll = new BScroll(this.$els.foodWrapper,{     probeType : 3  //讓better-scroll監聽scroll事件    });    this.foodsScroll.on('scroll',(pos) => {     this.scrollY =Math.abs(Math.round(pos.y));    })   },

2.實現聯動效果

(1)具體的聯動實現思路

  1. 在渲染完成后($nextTick內),初始化better-scroll,并在初始化函數內添加右側列表的scroll監聽事件,并記錄scrollY值到,存入vue的data中
  2. 在渲染完成后($nextTick內),計算右側列表的每一個大區塊的高度,并累加,存入數組listHeight
  3. 因為scrollY值在滾動中總是不斷變化的,所以在computed中計算出currentIndex,當前滾動區域是哪一個大區塊,也就是listHeight數組的下標
  4. 在dom中根據currentIndex應用左側列表被點中的樣式
  5. 在左側列表某一項被點中的時候,右側列表滑動到某一個大塊區域,
//初始化better-scroll_initScroll() {    this.menuScroll = new BScroll(this.$els.menuWrapper,{     click:true    });    this.foodsScroll = new BScroll(this.$els.foodWrapper,{     probeType : 3    });    this.foodsScroll.on('scroll',(pos) => {     this.scrollY =Math.abs(Math.round(pos.y));    })   },
_calculateHeight() {    let foodList = this.$els.foodWrapper.getElementsByClassName("food-list-hook");    let height = 0;    this.listHeight.push(height);    for(let i=0;i<foodList.length;i++) {     let item = foodList[i];     height += item.clientHeight;     this.listHeight.push(height);    }   }
computed: {   currentIndex() {    for(let i=0;i< this.listHeight.length;i++) {     let height1 = this.listHeight[i];     let height2 = this.listHeight[i+1];     if(!height2 || (this.scrollY >= height1 && this.scrollY < height2)){      return i;     }    }    return 0;   }  },
<div class="menu-wrapper" v-el:menu-wrapper>   <ul>    <!-- :class="{'current':currentIndex === $index}" 就是根據currentIndex應用左側列表被點中的樣式 -->    <li v-for="item in goods" class="menu-item"      :class="{'current':currentIndex === $index}"      @click="selectMenu($index,$event)">     <span class="text border-1px">      <span v-show="item.type > 0" class="icon"       :class="classMap[item.type]"></span>{{item.name}}     </span>    </li>   </ul>  </div>
//被點擊事件//dom<div class="menu-wrapper" v-el:menu-wrapper>   <ul>    <!-- @click="selectMenu($index,$event)" 就是點擊事件 -->    <li v-for="item in goods" class="menu-item"      :class="{'current':currentIndex === $index}"      @click="selectMenu($index,$event)">     <span class="text border-1px">      <span v-show="item.type > 0" class="icon"       :class="classMap[item.type]"></span>{{item.name}}     </span>    </li>   </ul>  </div>//js  selectMenu(index,event) {    if(!event._constructed) {     return ;    }    let foodList = this.$els.foodWrapper.getElementsByClassName("food-list-hook");    let el = foodList[index];    this.foodsScroll.scrollToElement(el,300);   },

以上所述是小編給大家介紹的vue和better-scroll實現列表左右聯動效果詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲欧美日韩在线 | 性高跟鞋xxxxhd4kvideos | 黄色片免费看看 | 欧美一级免费高清 | 久久免费综合视频 | 成人精品免费在线观看 | 色播视频在线播放 | 在线免费观看日韩视频 | 91成人一区二区三区 | 91精彩在线 | 精品一区二区亚洲 | 国产成人高清成人av片在线看 | 日本欧美一区二区 | 黄色网址在线免费播放 | 欧产日产国产精品99 | 国产精品99久久久久久大便 | 久久中文免费 | 宅男噜噜噜66国产免费观看 | 中文在线观看视频 | 精品一区二区视频在线观看 | 视频一区二区不卡 | 欧美一区在线观看视频 | 国产精品www | 亚洲一区二区三区四区精品 | 一本色道久久99精品综合蜜臀 | 精品在线观看一区二区三区 | 宅男噜噜噜66一区二区 | av国产片 | 欧美激情综合在线 | 国产手机国产手机在线 | 日韩视频在线观看免费 | www久| 99精品国产成人一区二区 | av在线等| 欧美成人精品一区二区男人小说 | 久久亚洲精品久久国产一区二区 | 欧美在线观看视频一区二区 | av日韩一区二区三区 | 九九热精彩视频 | 久久九九热re6这里有精品 | 欧美一级美国一级 |