亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

vue.js2.0 實現better-scroll的滾動效果實例詳解

2019-11-19 13:16:30
字體:
來源:轉載
供稿:網友

什么是 better-scroll

better-scroll 是一個移動端滾動的解決方案,它是基于 iscroll 的重寫,它和 iscroll 的主要區別在這里 。better-scroll 也很強大,不僅可以做普通的滾動列表,還可以做輪播圖、picker 等等。

<template>  <div>    <div class="goods">      <div class="menu-wrapper" ref="menuWrapper">      </div>      <div class="food-wrapper" ref="foodWrapper">      </div>    </div>  </div></template>

與1.0版本不同的是,我們使用的是ref

<script type="text/ecmascript-6">  import BScroll from "better-scroll";  export default {    data(){  return {  currentIndex:1,  goods:[]  }   }, created(){  this.classMap=['decrease','discount','special','invoice','guarantee'];  this.$http.get('/api/goods').then((response)=>{  response=response.body;  if (response.errno===ERR_OK) {   this.goods=response.data;  }        //dom結構加載結束(nextTick這個接口是計算dom相關的,要確保原生dom已經渲染了)  this.$nextTick(()=>{   this._initScroll();  });  }); }, methods:{  _initScroll(){        // 使用better-scroll實現的關鍵代碼  this.menuScroll=new BScroll(this.$refs.menuWrapper,{click:true});  this.foodScroll=new BScroll(this.$refs.foodWrapper,{click:true});  } }  };</script>

很簡單這樣頁面就可以滾動了,如下圖

但是,這樣左右兩個頁面并沒有聯動起來,需要我們再定義一個方法來計算滾動的高度,以及在計算屬性中計算左側當前索引在哪里

從而定義左側邊欄的位置

 computed:{  //用來計算左側當前索引在哪,從而定位到左側邊欄的位置  currentIndex(){  for (let i = 0; i < this.listHeight.length; i++) {   var height1=this.listHeight[i] ;   var height2=this.listHeight[i+1];   if(!height2||(this.scrollY >= height1 && this.scrollY < height2)){   return i;   }  }  return 0;  } }, methods:{  _initScroll(){  // 使用better-scroll實現的關鍵代碼  this.menuScroll=new BScroll(this.$refs.menuWrapper,{click:true});  this.foodScroll=new BScroll(this.$refs.foodWrapper,{   click: true,          //探針作用,實時監測滾動位置          probeType: 3  });  this.foodScroll.on('scroll',(pos)=>{   this.scrollY=Math.abs(Math.round(pos.y))  });  },  _calculateHeight(){  let foodList=this.$refs.foodWrapper.getElementsByClassName('food-list-hook');  let height=0;  this.listHeight.push(height);  for (var i = 0; i < foodList.length; i++) {   let item=foodList[i];   height+=item.clientHeight;   this.listHeight.push(height);  }  } }//dom結構加載結束(nextTick這個接口是計算dom相關的,要確保原生dom已經渲染了)         this.$nextTick(()=>{           this._initScroll();           this._calculateHeight();         });

在dom渲染后,也是需要計算高度的.

滑動右邊,實現左邊聯動已經實現了,接下來就是,點擊左邊的菜單,右邊的食物相應滾動到具體的位置

給左邊菜單綁定一個事件:@click="selectMenu(index,$event)"

/左邊的菜單項的點擊事件selectMenu(index,event){//自己默認派發事件時(BScroll),_constructed默認為true.但原生的瀏覽器并沒有這個屬性 if (!event._constructed) {   return; } //運用BScroll滾動到相應位置 //運用index去找到對應的右側位置 let foodList=this.$refs.foodWrapper.getElementsByClassName('food-list-hook'); //滾動到相應的位置 let el=foodList[index]; //設置滾動時間 this.foodScroll.scrollToElement(el,2000);}

至此,整個聯動實現的,完整代碼如下

<template> <div> <div class="goods">  <div class="menu-wrapper" ref="menuWrapper">  <ul>   <li v-for="(item,index) 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>  <div class="food-wrapper" ref="foodWrapper">  <ul>   <li v-for="(item,index) 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 :src="food.icon" width="57" height="57" alt="">    </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>     <div class="price">     <span class="now">¥{{food.price}}</span><span class="old" v-show="food.oldPrice">¥{{food.oldPrice}}</span>     </div>    </div>    </li>   </ul>   </li>  </ul>  </div> </div> </div></template><script type="text/ecmascript-6"> import BScroll from "better-scroll"; const ERR_OK=0; export default { props:{  seller:{  type:Object  } }, data(){  return {  goods:[],  listHeight:[],  scrollY:0  }   }, created(){  this.classMap=['decrease','discount','special','invoice','guarantee'];  this.$http.get('/api/goods').then((response)=>{  response=response.body;  if (response.errno===ERR_OK) {   this.goods=response.data;  }  //dom結構加載結束(nextTick這個接口是計算dom相關的,要確保原生dom已經渲染了)  this.$nextTick(()=>{   this._initScroll();   this._calculateHeight();  });  }); }, computed:{  //用來計算左側當前索引在哪,從而定位到左側邊欄的位置  currentIndex(){  for (let i = 0; i < this.listHeight.length; i++) {   var height1=this.listHeight[i] ;   var height2=this.listHeight[i+1];   if(!height2||(this.scrollY >= height1 && this.scrollY < height2)){   return i;   }  }  return 0;  } }, methods:{  _initScroll(){  // 使用better-scroll實現的關鍵代碼  this.menuScroll=new BScroll(this.$refs.menuWrapper,{click:true});  this.foodScroll=new BScroll(this.$refs.foodWrapper,{   click: true,          //探針作用,實時監測滾動位置          probeType: 3  });  this.foodScroll.on('scroll',(pos)=>{   this.scrollY=Math.abs(Math.round(pos.y))  });  },  _calculateHeight(){  let foodList=this.$refs.foodWrapper.getElementsByClassName('food-list-hook');  let height=0;  this.listHeight.push(height);  for (var i = 0; i < foodList.length; i++) {   let item=foodList[i];   height+=item.clientHeight;   this.listHeight.push(height);  }  },  //左邊的菜單項的點擊事件  selectMenu(index,event){  //自己默認派發事件時(BScroll),_constructed默認為true.但原生的瀏覽器并沒有這個屬性  if (!event._constructed) {   return;  }  //運用BScroll滾動到相應位置  //運用index去找到對應的右側位置  let foodList=this.$refs.foodWrapper.getElementsByClassName('food-list-hook');  //滾動到相應的位置  let el=foodList[index];  //設置滾動時間  this.foodScroll.scrollToElement(el,2000);  } } };</script><style lang="stylus" rel="stylesheet/stylus"> @import "../../common/stylus/mixin.styl";  .goods display:flex position:absolute top:174px bottom:46px width:100% overflow:hidden .menu-wrapper  flex:0 0 80px  width: 80px  background:#f3f5f7  .menu-item  display:table  height:54px  width:56px  padding:0 12px  line-height:14px  &.current   position:relative   z-index:10   margin-top:-1px   background:#fff   font-weight:700   .text   border-none()  .icon   display:inline-block   vertical-align:top   margin-right:2px   width:12px   height:12px   background-size:12px 12px   background-repeat:no-repeat   &.decrease   bg-image('decrease_3')   &.discount   bg-image('discount_3')    &.guarantee   bg-image('guarantee_3')    &.invoice   bg-image('invoice_3')   &.special   bg-image('special_3')  .text   display:table-cell   vertical-align:middle   width:56px   border-1px(rgba(7,17,27,0.1))   font-size:12px .food-wrapper  flex:1  .title  padding-left:14px  font-size:12px  color:rgb(147,153,159)  height:26px  border-left:2px solid #d9dde1  line-height:26px  background:#f3f5f7  .food-item  display:flex  margin:18px  padding-bottom:18px  border-1px(rgba(7,17,27,0.1))  &:last-child   border-none()   margin-bottom:0  .icon   flex:0 0 57px   margin-right:10px  .content   flex:1   .name   margin:2px 0 8px 0   height:14px   line-height:14px   font-size:14px   color:rgb(7,17,27)    .desc,.extra   line-height:10px   font-size:10px   color:rgb(147,153,159)   .desc      margin-bottom:8px   line-height:12px   .extra   .count    margin-right:12px   .price   font-weight:700   line-height:24px   .now    margin-right:8px    font-size:14px    color:rgb(240,20,20)   .old    text-decoration:line-through    font-size:10px    color:rgb(147,153,159)</style>


總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人欧美在线观看| 亚洲免费视频观看| 91久久嫩草影院一区二区| 亚洲激情成人网| 欧美高清视频在线观看| 亚洲2020天天堂在线观看| 国产精品狠色婷| 欧美多人爱爱视频网站| 亚洲a区在线视频| 久久99久国产精品黄毛片入口| 中文字幕在线看视频国产欧美在线看完整| 91精品国产高清自在线看超| 欧美老肥婆性猛交视频| 久久精品视频中文字幕| 亚洲人成自拍网站| 亚洲自拍偷拍视频| 日韩国产高清污视频在线观看| 中文字幕成人在线| 欧美视频国产精品| 欧美大成色www永久网站婷| 精品国产乱码久久久久久天美| 中文字幕av一区二区| 日韩精品在线免费播放| 国产一区二区三区在线观看网站| 欧美性猛交xxxx黑人猛交| 国产成人97精品免费看片| 亚洲国产日韩欧美综合久久| 欧美最猛性xxxxx免费| 日韩精品在线观看一区二区| 青青草成人在线| 亚洲国产欧美一区二区三区久久| 国产日本欧美一区| 国产精品色午夜在线观看| 日韩美女免费观看| 日韩极品精品视频免费观看| 日韩不卡中文字幕| 精品国产999| 亚洲理论片在线观看| 亚洲级视频在线观看免费1级| 一区二区亚洲精品国产| 色噜噜久久综合伊人一本| 久久精品中文字幕免费mv| 亚洲精品之草原avav久久| 4438全国亚洲精品在线观看视频| 日韩av电影手机在线观看| 欧美日韩国产丝袜美女| 日韩精品在线视频观看| 中文字幕久热精品在线视频| 国内精品模特av私拍在线观看| 日韩av电影在线播放| 成人中心免费视频| 欧美一区二区三区精品电影| 日韩精品免费在线视频观看| 欧亚精品在线观看| 中文字幕亚洲无线码a| 高跟丝袜欧美一区| 国产精品电影网站| 欧美高清视频在线| 欧美午夜宅男影院在线观看| 日韩av一区二区在线| 亚洲人成网站777色婷婷| 中文在线资源观看视频网站免费不卡| 国产精品h片在线播放| 久久影视电视剧免费网站清宫辞电视| 中文字幕日韩精品在线观看| 亚洲一区美女视频在线观看免费| 57pao成人永久免费视频| 久久久国产一区二区| 国产精品黄色影片导航在线观看| 日韩精品视频在线免费观看| 欧美成人精品一区| 欧美成人国产va精品日本一级| 国产精品日韩欧美| 91精品久久久久久久久| 国产一区二区丝袜| 97久久久免费福利网址| 欧美成人免费va影院高清| 懂色av一区二区三区| 中文字幕久久精品| 中文字幕亚洲在线| 91探花福利精品国产自产在线| www.欧美视频| 亚洲摸下面视频| 最近2019中文字幕mv免费看| 久久精品一区中文字幕| 久久久国产一区二区三区| 91亚洲精品久久久久久久久久久久| 国产91色在线|免| 久久精品国产久精国产思思| 精品国产电影一区| 亚洲欧洲成视频免费观看| 日韩高清人体午夜| 日韩av成人在线| 亚洲人a成www在线影院| 美日韩精品免费观看视频| 18性欧美xxxⅹ性满足| 亚洲人成电影网站色www| 91免费电影网站| 亚洲午夜激情免费视频| **欧美日韩vr在线| 色噜噜狠狠狠综合曰曰曰| 92国产精品久久久久首页| 久久躁日日躁aaaaxxxx| 久久久999成人| 亚洲欧美一区二区精品久久久| 国产精品久久99久久| 国产精品成人品| 国产精品狼人色视频一区| 精品国产成人av| 9.1国产丝袜在线观看| 91系列在线观看| 国产精品久久一| 日韩在线视频观看| 久久精品国产精品亚洲| 国产精品高潮粉嫩av| 92版电视剧仙鹤神针在线观看| 一本色道久久88精品综合| 亚洲精品999| 97色在线观看免费视频| 国产一区二区在线免费视频| 91精品视频免费观看| 国产欧美日韩免费看aⅴ视频| 久久精品视频中文字幕| 国产成人精品a视频一区www| 久久久精品电影| 日韩成人性视频| 日韩一区二区av| 日韩小视频网址| 97在线视频观看| 国产视频一区在线| 欧美电影在线免费观看网站| 亚洲免费中文字幕| 国产一区二区日韩| 国产精品黄色影片导航在线观看| 91久久夜色精品国产网站| 狠狠色狠狠色综合日日小说| 欧美在线中文字幕| 91色精品视频在线| 亚洲欧美激情另类校园| 精品欧美国产一区二区三区| 国产亚洲精品久久久久久牛牛| 国产精品永久免费| xvideos国产精品| 亚洲精品影视在线观看| 亚洲品质视频自拍网| 欧美wwwwww| 国产免费亚洲高清| 最近中文字幕mv在线一区二区三区四区| 亚洲精品小视频在线观看| 国产日韩欧美夫妻视频在线观看| 国产欧美精品在线播放| 亚洲一区中文字幕| 亚洲欧美视频在线| 亚洲欧美国产va在线影院| 国产精品极品美女在线观看免费| 中文字幕欧美日韩| 久久理论片午夜琪琪电影网| 亚洲伦理中文字幕| 久久av在线播放| 国产精品毛片a∨一区二区三区|国| 国产亚洲精品91在线| 国产精品久久久久久久9999| 久久久精品久久久| 美女啪啪无遮挡免费久久网站|