国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

vue滾動(dòng)軸插件better-scroll使用詳解

2019-11-19 15:09:37
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

跟做慕課網(wǎng)的vue高仿外賣項(xiàng)目中用到了一個(gè)很好用的插件BScroll,用來(lái)計(jì)算左側(cè)menu欄對(duì)應(yīng)右側(cè)foods欄相應(yīng)顯示的食物區(qū),如果不用插件就比較費(fèi)事了,因此這里分享一下這個(gè)插件的簡(jiǎn)單使用:

一、項(xiàng)目中下載,并引入

在配置文件package.json中引入版本

"dependencies": { "better-scroll": "^0.1.7" }

然后進(jìn)入項(xiàng)目目錄,打開(kāi)cmd更新配置

npm i (i是install縮寫(xiě))

最后引入,比如我在項(xiàng)目goods組件中使用則:

import BScroll from 'better-scroll';

二、舉個(gè)栗子

需求是處于當(dāng)前比如熱銷榜欄目,則菜單欄高亮。滾動(dòng)到下一欄高亮欄目則下一欄菜單高亮。點(diǎn)擊菜單中某一欄菜單該欄目高亮并且跳轉(zhuǎn)到對(duì)應(yīng)食物區(qū)。

下面是foods組件中的代碼

template:

<template> <div class="goods"> <div class="menu-wrap" ref="menuWrap">//菜單欄  <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="foods-wrap" ref="foodsWrap">//食物欄 </div> </div></template>

script

<script type="text/ecmascript-6"> import Vue from 'vue'; import BScroll from 'better-scroll'; import shopcart from '@/components/shopcart/shopcart'; export default { props: {//接收父組件傳的數(shù)據(jù)  seller: {  type: Object  } }, data () {  return {  goods: [],  listHeight: [],//菜單中一個(gè)菜單欄目的高度  scrollY: 0//定義的Y滾動(dòng)軸及初始值  }; }, computed: {//計(jì)算屬性  currentIndex () {//當(dāng)前菜單欄在整個(gè)菜單中的下標(biāo)index  for (let i = 0; i < this.listHeight.length; i++) {//遍歷菜單中每個(gè)欄目的高度   let height1 = this.listHeight[i];//第i個(gè)欄目的高度   let height2 = this.listHeight[i + 1];//第i+1個(gè)欄目的高度   if (!height2 || (this.scrollY >= height1 && this.scrollY < height2)) {//根據(jù)當(dāng)前滾動(dòng)軸的位置得出index(如果第二個(gè)欄目不存在即第一個(gè)欄目是最后一個(gè))或者(當(dāng)前欄目高度大于等于第一個(gè)并且當(dāng)前滾動(dòng)軸小于第二個(gè)欄目高度)   return i;//如果滿足則返回index   }  }  return 0;//初始值0  } }, created () {  Vue.prototype.$http.get('/api/goods')  .then(res => {   this.goods = res.data.data;   this.$nextTick(() => {//   this._initScroll();   this._calculateHeight();   });  });  this.classMap = ['decrease', 'discount', 'special', 'invoice', 'guarantee']; }, methods: {  selectMenu (index, event) {  if (!event._constructed) {   return;  }  let foodList = this.$refs.foodsWrap.getElementsByClassName('food-list-hook');  let el = foodList[index];  this.foodsScroll.scrollToElement(el, 300);  },  _initScroll () {  this.menuScroll = new BScroll(this.$refs.menuWrap, {   click: true  });  this.foodsScroll = new BScroll(this.$refs.foodsWrap, {probeType: 3  });  this.foodsScroll.on('scroll', (pos) => {   this.scrollY = Math.abs(Math.round(pos.y));   console.log(this.scrollY);  });  },  _calculateHeight () {  let foodList = this.$refs.foodsWrap.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);  }  } } };</script>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿拉善盟| 高密市| 通城县| 安化县| 新民市| 阿尔山市| 永吉县| 都江堰市| 柳林县| 炎陵县| 灵寿县| 防城港市| 通江县| 南康市| 滦南县| 仙游县| 察哈| 德令哈市| 九江县| 玛沁县| 永新县| 西盟| 始兴县| 咸阳市| 镇宁| 博客| 永昌县| 武邑县| 阿拉善右旗| 江安县| 九寨沟县| 永丰县| 沾益县| 平邑县| 丹东市| 土默特左旗| 金溪县| 安达市| 西丰县| 定州市| 芦山县|