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 相关文章推荐
静态的动态续篇之来点XML
Aug 15 Javascript
jQuery的实现原理的模拟代码 -3 事件处理
Aug 03 Javascript
jquery 插件学习(一)
Aug 06 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
Aug 12 Javascript
javascript 获取iframe里页面中元素值的方法
Feb 17 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
Apr 17 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
Dec 22 Javascript
JS通过调用微信API实现微信支付功能的方法示例
Jun 29 Javascript
JavaScript之promise_动力节点Java学院整理
Jul 03 Javascript
微信小程序url与token设置详解
Sep 26 Javascript
webpack打包并将文件加载到指定的位置方法
Feb 22 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
Sep 12 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
php中变量及部分适用方法
2008/03/27 PHP
深入了解PHP类Class的概念
2012/06/14 PHP
PHP中的use关键字概述
2014/07/23 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
$()JS小技巧
2007/07/21 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
node.js中的fs.realpathSync方法使用说明
2014/12/16 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
js实现同一个页面多个渐变效果的方法
2015/04/10 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
jQuery判断一个元素是否可见的方法
2015/06/05 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
简单学习vue指令directive
2016/11/03 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
Javascript操作select控件代码实例
2020/02/14 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
2020/03/26 Javascript
JS前端基于canvas给图片添加水印
2020/11/11 Javascript
python和C语言混合编程实例
2014/06/04 Python
python Crypto模块的安装与使用方法
2017/12/21 Python
python中使用PIL制作并验证图片验证码
2018/03/15 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
2018/12/19 Python
Python小整数对象池和字符串intern实例解析
2020/03/21 Python
基于python图像处理API的使用示例
2020/04/03 Python
python Tornado框架的使用示例
2020/10/19 Python
美国祛痘、抗衰老药妆品牌:Murad
2016/08/27 全球购物
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
2012/10/29 面试题
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
韩语专业本科生求职信
2013/10/01 职场文书
化妆品促销方案
2014/02/24 职场文书
经典毕业生求职信
2014/07/12 职场文书
租房安全协议书
2014/08/20 职场文书
求职自我评价范文100字
2014/09/23 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书