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 基础知识 被自己遗忘的
Oct 15 Javascript
比较详细的关于javascript 解析json的代码
Dec 16 Javascript
学习JavaScript设计模式之装饰者模式
Jan 19 Javascript
EasyUI折叠表格层次显示detailview详解及实例
Dec 28 Javascript
Node.js常用工具之util模块
Mar 09 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
Nov 10 Javascript
浅析Angular19 自定义表单控件
Jan 31 Javascript
详解vue静态资源打包中的坑与解决方案
Feb 05 Javascript
JavaScript比较同一天的时间大小实例代码
Feb 09 Javascript
性能优化篇之Webpack构建速度优化的建议
Apr 03 Javascript
jQuery实现手风琴效果(蒙版)
Jan 11 jQuery
vue 中 get / delete 传递数组参数方法
Mar 23 Vue.js
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
从网上搜到的phpwind 0day的代码
2006/12/07 PHP
解析php中var_dump,var_export,print_r三个函数的区别
2013/06/21 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
2015/03/17 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
2015/05/09 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
js一组验证函数
2008/12/20 Javascript
js导出格式化的excel 实例方法
2013/07/17 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
js中使用使用原型(prototype)定义方法的好处详解
2016/07/04 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
Bootstrap轮播图的使用和理解4
2016/12/14 Javascript
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
详解js中的几种常用设计模式
2020/07/16 Javascript
微信小程序自定义胶囊样式
2020/12/27 Javascript
[01:29]2017 DOTA2国际邀请赛官方英雄手办展示
2017/03/18 DOTA
python简单实现计算过期时间的方法
2015/06/09 Python
在Pycharm中自动添加时间日期作者等信息的方法
2019/01/16 Python
详解Python Opencv和PIL读取图像文件的差别
2019/12/27 Python
如何通过python实现全排列
2020/02/11 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
Python 抓取数据存储到Redis中的操作
2020/07/16 Python
学校三八妇女节活动情况总结
2014/03/09 职场文书
选秀节目策划方案
2014/06/06 职场文书
工作作风承诺书
2014/08/30 职场文书
逃课检讨书
2015/01/26 职场文书
绿色环保倡议书
2015/04/28 职场文书
js实现上传图片到服务器
2021/04/11 Javascript
Nginx缓存设置案例详解
2021/09/15 Servers