vue滚动轴插件better-scroll使用详解


Posted in Javascript onOctober 17, 2017

跟做慕课网的vue高仿外卖项目中用到了一个很好用的插件BScroll,用来计算左侧menu栏对应右侧foods栏相应显示的食物区,如果不用插件就比较费事了,因此这里分享一下这个插件的简单使用:

一、项目中下载,并引入

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

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

然后进入项目目录,打开cmd更新配置

npm i (i是install缩写)

最后引入,比如我在项目goods组件中使用则:

import BScroll from 'better-scroll';

二、举个栗子

需求是处于当前比如热销榜栏目,则菜单栏高亮。滚动到下一栏高亮栏目则下一栏菜单高亮。点击菜单中某一栏菜单该栏目高亮并且跳转到对应食物区。

下面是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: {//接收父组件传的数据
  seller: {
  type: Object
  }
 },
 data () {
  return {
  goods: [],
  listHeight: [],//菜单中一个菜单栏目的高度
  scrollY: 0//定义的Y滚动轴及初始值
  };
 },
 computed: {//计算属性
  currentIndex () {//当前菜单栏在整个菜单中的下标index
  for (let i = 0; i < this.listHeight.length; i++) {//遍历菜单中每个栏目的高度
   let height1 = this.listHeight[i];//第i个栏目的高度
   let height2 = this.listHeight[i + 1];//第i+1个栏目的高度
   if (!height2 || (this.scrollY >= height1 && this.scrollY < height2)) {//根据当前滚动轴的位置得出index(如果第二个栏目不存在即第一个栏目是最后一个)或者(当前栏目高度大于等于第一个并且当前滚动轴小于第二个栏目高度)
   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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ExtJS 2.0实用简明教程 之Ext类库简介
Apr 29 Javascript
JQuery防止退格键网页后退的实现代码
Mar 23 Javascript
jquery获取自定义属性(attr和prop)实例介绍
Apr 21 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
Feb 17 Javascript
jQuery实现跟随鼠标运动图层效果的方法
Feb 02 Javascript
jquery图片轮播特效代码分享
Apr 20 Javascript
jquery事件的ready()方法使用详解
Nov 11 Javascript
浅谈Web页面向后台提交数据的方式和选择
Sep 23 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
Apr 25 Javascript
jQuery滚动插件scrollable.js用法分析
May 25 jQuery
浅谈开发eslint规则
Oct 01 Javascript
JavaScript进阶(三)闭包原理与用法详解
May 09 Javascript
react中的ajax封装实例详解
Oct 17 #Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
Oct 17 #Javascript
打造通用的匀速运动框架(实例讲解)
Oct 17 #Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
Oct 17 #Javascript
Vue中封装input组件的实例详解
Oct 17 #Javascript
js获取文件里面的所有文件名(实例)
Oct 17 #Javascript
Vue中之nextTick函数源码分析详解
Oct 17 #Javascript
You might like
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
php实现面包屑导航例子分享
2015/12/19 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
JS 面向对象的5钟写法
2009/07/31 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
js异步加载的三种解决方案
2013/03/04 Javascript
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
深入解析JavaScript的闭包机制
2015/10/20 Javascript
jQuery实现的分子运动小球碰撞效果
2016/01/27 Javascript
js判断浏览器是否支持严格模式的方法
2016/10/04 Javascript
JS克隆,属性,数组,对象,函数实例分析
2016/11/26 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
vue实现页面加载动画效果
2017/09/19 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
2017/10/21 Javascript
解决$store.getters调用不执行的问题
2019/11/08 Javascript
详解javascript中var与ES6规范中let、const区别与用法
2020/01/11 Javascript
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
Python列表推导式与生成器用法分析
2018/08/02 Python
python实现定时发送qq消息
2019/01/18 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
使用python+poco+夜神模拟器进行自动化测试实例
2020/04/23 Python
阿根廷网上配眼镜:SmartBuyGlasses阿根廷
2016/08/19 全球购物
大专生简历的自我评价
2013/11/26 职场文书
建筑专业自荐信范文
2014/01/05 职场文书
高中生家长会演讲稿
2014/01/14 职场文书
收款委托书范本
2014/09/11 职场文书
孔繁森观后感
2015/06/10 职场文书
python3读取文件指定行的三种方法
2021/05/24 Python
Redis入门基础常用操作命令整理
2022/06/01 Redis