vue基于better-scroll实现左右联动滑动页面


Posted in Javascript onJune 30, 2020

本文实例为大家分享了vue基于better-scroll实现左右联动滑动页面,供大家参考,具体内容如下

界面如下:

vue基于better-scroll实现左右联动滑动页面

vue模板

<template>
 <div class="goods">
 <div class="menu-wrapper">
 <ul>
 <li class="menu-item" v-for="(good, index) in goods" :key="index" 
  :class="{current: currentIndex===index}" @click="clickMenuItem(index)">
  <span class="text bottom-border-1px">
  <img :src="good.icon" class="icon" v-if="good.icon">
  {{good.name}}
  </span> 
 </li>
 </ul>
 </div>
 <div class="foods-wrapper">
 <ul ref="foodsWrapperUl">
 <li class="food-list food-list-hook" v-for="(good, index) in goods" :key="index">
  <h1 class="title">{{good.name}}</h1>
  <ul>
  <li class="food-item bottom-border-1px" v-for="(food, index) in good.foods" :key="index">
  <div class="icon">
  <img :src="food.icon" width="57" height="57" alt="">
  </div>
  <div class="content">
  <h2 class="name">{{food.name}}</h2>
  <p class="desc">{{food.description}}</p>
  <div class="extra">
   <span class="count">月售{{food.sellCount}}份</span>
   <span>好评{{food.rating}}%</span>
  </div>
  <div class="price">
   <span class="now">¥{{food.price}}</span>
   <span class="old" v-if="food.oldPrice">¥{{food.oldPrice}}</span>
  </div>
  <div class="cartcontrol-wrapper"><cartcontrol :food="food"/></div>
  </div>
  </li>
  </ul>
 </li>
 </ul>
 </div>
 </div>
</template>

<script>
 import BScroll from 'better-scroll'
 import { mapState } from 'vuex'
 import CartControl from "../../../components/CartControl/CartControl"
 export default {
 data() { 
 return {
 scrollY: 0,
 tops: []
 }
 },
 mounted () {
 this.$store.dispatch('getShopGoods', () => { //回调函数,等到action中执行
 this.$nextTick(() => { //页面更新后再使用滚动组件,获取DOM高度
  this._initScroll();
  this._initTops();
 })
 })
 },
 methods: {
 _initScroll() {
 new BScroll('.menu-wrapper', {
  click:true
 })

 this.foodsScroll = new BScroll('.foods-wrapper', {
  probeType: 2,
  click: true
 })

 this.foodsScroll.on('scroll', (pos) => {
  this.scrollY = Math.abs(pos.y);
 })

 this.foodsScroll.on('scrollEnd', (pos) => {
  this.scrollY = Math.abs(pos.y);
 })
 },

 _initTops () {
 const tops = [];
 let top = 0;
 tops.push(top);
 const lis = this.$refs.foodsWrapperUl.getElementByClassName('food-list-hook');
 Array.prototype.slice.call(lis).forEach((li, index) => {
  top += li.clientHeight;
  tops.push(top);
 })
 this.tops = tops;
 },

 clickMenuItem (index) {
 const top = this.tops[index];
 this.scrollY = top;
 this.foodsScroll.scrollTo(0, -top, 300)
 }
 },

 computed: {
 ...mapState(['goods']),
 currentIndex () {
 return this.tops.findIndex((top, index) => {
  return this.scrollY>=top && this.scrollY<this.tops[index+1]
 })
 }
 }
 }
</script>//也可以不用计算属性,直接在data中定义currentIndex,改动时赋新值,那页面自然跟着更新

state.js

goods: [], // 商品列表

action.js

//异步获取商品列表
 async getShopGoods ({commit}, callback) {
 const result = await reqShopGoods();
 const goods = result.data;
 commit(RECEIVE_GOODS, {goods});
 callback && callback();
 }

mutation.js

[RECEIVE_GOODS](state, {goods}) {
 state.goods = goods
 }

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

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

Javascript 相关文章推荐
javascript中length属性的探索
Jul 31 Javascript
js 自制滚动条的小例子
Mar 16 Javascript
JS判断、校验MAC地址的2个实例
May 05 Javascript
JS实现鼠标框选效果完整实例
Jun 20 Javascript
微信小程序 PHP后端form表单提交实例详解
Jan 12 Javascript
element 结合vue 在表单验证时有值却提示错误的解决办法
Jan 22 Javascript
vue初尝试--项目结构(推荐)
Jan 30 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
Mar 01 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
Oct 09 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
Dec 30 Javascript
原生JS实现逼真的图片3D旋转效果详解
Feb 16 Javascript
微信小程序 云开发模糊查询实现解析
Sep 02 Javascript
Postman动态获取返回值过程详解
Jun 30 #Javascript
JS简易计算器实例讲解
Jun 30 #Javascript
如何在postman中添加cookie信息步骤解析
Jun 30 #Javascript
JSON获取属性值方法代码实例
Jun 30 #Javascript
JS猜数字游戏实例讲解
Jun 30 #Javascript
vue实现评价星星功能
Jun 30 #Javascript
Json实现传值到后台代码实例
Jun 30 #Javascript
You might like
服务器端解压缩zip的脚本
2006/12/22 PHP
PHP微框架Dispatch简介
2014/06/12 PHP
php三元运算符知识汇总
2015/07/02 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
javascript eval和JSON之间的联系
2009/12/31 Javascript
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
用Mootools获得操作索引的两种方法分享
2011/12/12 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
2013/03/19 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
js中iframe调用父页面的方法
2014/10/30 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
javascript中apply、call和bind的使用区别
2016/04/05 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
openLayer4实现动态改变标注图标
2020/08/17 Javascript
JS实现拖拽元素时与另一元素碰撞检测
2020/08/27 Javascript
Python中的面向对象编程详解(上)
2015/04/13 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
CSS3属性使网站设计增强同时不消弱可用性
2009/08/29 HTML / CSS
CSS3 border-radius圆角的实现方法及用法详解
2020/09/14 HTML / CSS
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
外贸业务员求职自荐信分享
2013/09/21 职场文书
土木工程毕业生自荐信
2013/11/12 职场文书
建筑设计学生的自我评价
2014/01/16 职场文书
学校安全检查制度
2014/01/27 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
小学教师党员承诺书
2015/04/27 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书
2016大学生优秀志愿者事迹材料
2016/02/25 职场文书