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 相关文章推荐
Jquery中获取iframe的代码
Jan 11 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
Jan 11 Javascript
innerText和textContent对比及使用介绍
Feb 27 Javascript
javascript 使用 NodeList需要注意的问题
Mar 04 Javascript
关于js遍历表格的实例
Jul 10 Javascript
JavaScript中的apply和call函数详解
Jul 20 Javascript
实例解析jQuery工具函数
Dec 01 Javascript
vue双花括号的使用方法 附练习题
Nov 07 Javascript
在vue-cli项目中使用bootstrap的方法示例
Apr 21 Javascript
vue.js动画中的js钩子函数的实现
Jul 06 Javascript
查找Vue中下标的操作(some和findindex)
Aug 12 Javascript
vue中选中多个选项并且改变选中的样式的实例代码
Sep 16 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
阿拉伯的咖啡与水烟
2021/03/03 咖啡文化
php简单封装了一些常用JS操作
2007/02/25 PHP
php和javascript之间变量的传递实现代码
2012/12/19 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
php实现的RSS生成类实例
2015/04/23 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
用原生JavaScript实现jQuery的$.getJSON的解决方法
2013/05/03 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
2017/08/10 Javascript
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
2018/11/16 Javascript
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
vue-cli3 从搭建到优化的详细步骤
2019/01/20 Javascript
详解微信小程序图片地扯转base64解决方案
2019/08/18 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
2020/02/19 Javascript
[02:09]EHOME夺得首届辉夜杯冠军—现场颁奖仪式
2015/12/28 DOTA
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
python中sleep函数用法实例分析
2015/04/29 Python
浅析Python中的join()方法的使用
2015/05/19 Python
python Flask实现restful api service
2017/12/04 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
python实现抖音视频批量下载
2018/06/20 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
2019/08/08 Python
python实现简单坦克大战
2020/03/27 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
在校大学生个人的自我评价
2014/02/13 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
2014年流动人口工作总结
2014/11/26 职场文书
python OpenCV学习笔记
2021/03/31 Python