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

vue.js2.0如何實(shí)現(xiàn)better-scroll的滾動(dòng)效果

這篇文章主要介紹vue.js2.0如何實(shí)現(xiàn)better-scroll的滾動(dòng)效果,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

在梅列等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,營(yíng)銷型網(wǎng)站建設(shè),外貿(mào)營(yíng)銷網(wǎng)站建設(shè),梅列網(wǎng)站建設(shè)費(fèi)用合理。

什么是 better-scroll

better-scroll 是一個(gè)移動(dòng)端滾動(dòng)的解決方案,它是基于 iscroll 的重寫,它和 iscroll 的主要區(qū)別在這里 。better-scroll 也很強(qiáng)大,不僅可以做普通的滾動(dòng)列表,還可以做輪播圖、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結(jié)構(gòu)加載結(jié)束(nextTick這個(gè)接口是計(jì)算dom相關(guān)的,要確保原生dom已經(jīng)渲染了)
  this.$nextTick(()=>{
   this._initScroll();
  });
  });
 },
 methods:{
  _initScroll(){
        // 使用better-scroll實(shí)現(xiàn)的關(guān)鍵代碼
  this.menuScroll=new BScroll(this.$refs.menuWrapper,{click:true});
  this.foodScroll=new BScroll(this.$refs.foodWrapper,{click:true});
  }
 }
  };
</script>

很簡(jiǎn)單這樣頁(yè)面就可以滾動(dòng)了,如下圖

vue.js2.0如何實(shí)現(xiàn)better-scroll的滾動(dòng)效果

但是,這樣左右兩個(gè)頁(yè)面并沒有聯(lián)動(dòng)起來,需要我們?cè)俣x一個(gè)方法來計(jì)算滾動(dòng)的高度,以及在計(jì)算屬性中計(jì)算左側(cè)當(dāng)前索引在哪里

從而定義左側(cè)邊欄的位置

 computed:{
  //用來計(jì)算左側(cè)當(dāng)前索引在哪,從而定位到左側(cè)邊欄的位置
  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實(shí)現(xiàn)的關(guān)鍵代碼
  this.menuScroll=new BScroll(this.$refs.menuWrapper,{click:true});
  this.foodScroll=new BScroll(this.$refs.foodWrapper,{
   click: true,
          //探針作用,實(shí)時(shí)監(jiān)測(cè)滾動(dòng)位置
          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結(jié)構(gòu)加載結(jié)束(nextTick這個(gè)接口是計(jì)算dom相關(guān)的,要確保原生dom已經(jīng)渲染了)
         this.$nextTick(()=>{
           this._initScroll();
           this._calculateHeight();
         });

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

滑動(dòng)右邊,實(shí)現(xiàn)左邊聯(lián)動(dòng)已經(jīng)實(shí)現(xiàn)了,接下來就是,點(diǎn)擊左邊的菜單,右邊的食物相應(yīng)滾動(dòng)到具體的位置

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

/左邊的菜單項(xiàng)的點(diǎn)擊事件
selectMenu(index,event){
//自己默認(rèn)派發(fā)事件時(shí)(BScroll),_constructed默認(rèn)為true.但原生的瀏覽器并沒有這個(gè)屬性
 if (!event._constructed) {
   return;
 }
 //運(yùn)用BScroll滾動(dòng)到相應(yīng)位置
 //運(yùn)用index去找到對(duì)應(yīng)的右側(cè)位置
 let foodList=this.$refs.foodWrapper.getElementsByClassName('food-list-hook');
 //滾動(dòng)到相應(yīng)的位置
 let el=foodList[index];
 //設(shè)置滾動(dòng)時(shí)間
 this.foodScroll.scrollToElement(el,2000);
}

至此,整個(gè)聯(lián)動(dòng)實(shí)現(xiàn)的,完整代碼如下

<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">
   <h2 class="title">{{item.name}}</h2>
   <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">
     <h3 class="name">{{food.name}}</h3>
     <p class="desc">{{food.description}}</p>
     <div class="extra">
     <span class="count">月售{{food.sellCount}}份</span>
     <span>好評(píng)率{{food.rating}}%</span>
     </div>
     <div class="price">
     <span class="now">&yen;{{food.price}}</span><span class="old" v-show="food.oldPrice">&yen;{{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結(jié)構(gòu)加載結(jié)束(nextTick這個(gè)接口是計(jì)算dom相關(guān)的,要確保原生dom已經(jīng)渲染了)
  this.$nextTick(()=>{
   this._initScroll();
   this._calculateHeight();
  });
  });
 },
 computed:{
  //用來計(jì)算左側(cè)當(dāng)前索引在哪,從而定位到左側(cè)邊欄的位置
  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實(shí)現(xiàn)的關(guān)鍵代碼
  this.menuScroll=new BScroll(this.$refs.menuWrapper,{click:true});
  this.foodScroll=new BScroll(this.$refs.foodWrapper,{
   click: true,
          //探針作用,實(shí)時(shí)監(jiān)測(cè)滾動(dòng)位置
          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);
  }
  },
  //左邊的菜單項(xiàng)的點(diǎn)擊事件
  selectMenu(index,event){
  //自己默認(rèn)派發(fā)事件時(shí)(BScroll),_constructed默認(rèn)為true.但原生的瀏覽器并沒有這個(gè)屬性
  if (!event._constructed) {
   return;
  }
  //運(yùn)用BScroll滾動(dòng)到相應(yīng)位置
  //運(yùn)用index去找到對(duì)應(yīng)的右側(cè)位置
  let foodList=this.$refs.foodWrapper.getElementsByClassName('food-list-hook');
  //滾動(dòng)到相應(yīng)的位置
  let el=foodList[index];
  //設(shè)置滾動(dòng)時(shí)間
  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是什么

Vue是一套用于構(gòu)建用戶界面的漸進(jìn)式JavaScript框架,Vue與其它大型框架的區(qū)別是,使用Vue可以自底向上逐層應(yīng)用,其核心庫(kù)只關(guān)注視圖層,方便與第三方庫(kù)和項(xiàng)目整合,且使用Vue可以采用單文件組件和Vue生態(tài)系統(tǒng)支持的庫(kù)開發(fā)復(fù)雜的單頁(yè)應(yīng)用。

以上是“vue.js2.0如何實(shí)現(xiàn)better-scroll的滾動(dòng)效果”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

當(dāng)前題目:vue.js2.0如何實(shí)現(xiàn)better-scroll的滾動(dòng)效果
轉(zhuǎn)載注明:http://aaarwkj.com/article26/isgecg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)微信公眾號(hào)、、手機(jī)網(wǎng)站建設(shè)、做網(wǎng)站、定制開發(fā)

廣告

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

微信小程序開發(fā)
久久人妻一区二区三区免费密臀| 美女丝袜美腿魅惑男人| 91精品中综合久久久久| 日韩乱码高清一本免费啪| 人人妻人人澡人人妻| 亚洲男人天堂免费观看| 麻豆成人三级电影在线| 日韩一级久久精品理论| 日韩在线欧美在线一区二区| 日本成人精品二区在线观看| 做性视频大全在线观看| 农村女人91熟女熟妇| 自偷自拍亚洲综合精品| 夫妻性生活在线视频一级片| 亚洲精品中文一区二区三区| 性生活视频在线观看免费| 99精品热这里只有精品| 国产精品日韩理论在线| 蜜臀在线观看免费视频| 精品综合亚洲中文字幕| 少妇高潮视频在线观看| 91最新精品丝袜国产在线| 国产一级特黄大片特爽| 亚洲国产精品一区二区首页| 九九在线免费视频蜜臀| 黄色亚洲大片免费在线观看| 日本少妇人妻一区二区| 欧美成人极品一区二区三区| 亚洲精品视频一区二区| 午夜亚洲大片在线观看| 亚洲欧美国产精品日韩| 亚洲精品中文字幕日本乱码| 国产熟女av一区二区| 欧美精品在线观看不卡一区| 日韩av裸体在线播放| 日本一级特黄大片做受在线观看| 欧美亚洲中文字幕高清| 变态另类日韩欧美高清| 不卡视频一区中文字幕| 亚洲精品麻豆一区二区| 亚洲av午夜福利麻豆av|