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 相关文章推荐
通过js简单实现将一个文本内容转译成加密文本
Oct 22 Javascript
jquery.validate的使用说明介绍
Nov 12 Javascript
一篇文章掌握RequireJS常用知识
Jan 26 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
Mar 25 Javascript
微信公众号支付H5调用支付解析
Nov 04 Javascript
ionic 自定义弹框效果
Jun 27 Javascript
js实现音乐播放控制条
Sep 09 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
Oct 20 Javascript
JS 验证码功能的三种实现方式
Nov 26 Javascript
vue使用vuex实现首页导航切换不同路由的方法
May 08 Javascript
Vue封装Axios请求和拦截器的步骤
Sep 16 Javascript
小程序实现侧滑删除功能
Jun 25 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保存session到memcache服务器的方法
2016/01/19 PHP
Yii多表联合查询操作详解
2016/06/02 PHP
php中final关键字用法分析
2016/12/07 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
js getElementsByTagName的简写方式
2010/06/27 Javascript
JavaScript字符串对象substring方法入门实例(用于截取字符串)
2014/10/17 Javascript
jquery插件推荐 jquery.cookie
2014/11/09 Javascript
javascript里使用php代码实例
2014/12/13 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
javascript删除元素节点removeChild()用法实例
2015/05/26 Javascript
浅谈JavaScript中运算符的优先级
2015/07/07 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
ajax接收后台数据在html页面显示
2017/02/19 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
2018/07/02 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
layui前端时间戳转化实例
2019/11/15 Javascript
浅谈Vue.use到底是什么鬼
2020/01/21 Javascript
python错误处理详解
2014/09/28 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
python中import reload __import__的区别详解
2017/10/16 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
2018/01/04 Python
Python温度转换实例分析
2018/01/17 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
Python实现转换图片背景颜色代码
2020/04/30 Python
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
几个Shell Script面试题
2012/08/31 面试题
企业口号大全
2014/06/12 职场文书
优秀团队申报材料
2014/12/26 职场文书
大学学习委员竞选稿
2015/11/20 职场文书