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 相关文章推荐
jquery 事件执行检测代码
Dec 09 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
Feb 19 Javascript
jQuery获取上传文件的名称的正则表达式
May 21 Javascript
jQuery 限制输入字符串长度
Jun 20 Javascript
javascript将中国数字格式转换成欧式数字格式的简单实例
Aug 02 Javascript
jquery实现全选、全不选以及单选功能
Mar 23 jQuery
jQuery实现页码跳转式动态数据分页
Dec 31 jQuery
JavaScript轮播停留效果的实现思路
May 24 Javascript
H5实现手机拍照和选择上传功能
Dec 18 Javascript
微信小程序封装多张图片上传api代码实例
Dec 30 Javascript
微信jssdk踩坑之签名错误invalid signature
May 19 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
Feb 08 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
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
php处理带有中文URL的方法
2016/07/11 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
jqPlot 基于jquery的画图插件
2011/04/26 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
jQuery select表单提交省市区城市三级联动核心代码
2014/06/09 Javascript
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
2016/04/15 Javascript
js时间控件只显示年月
2017/01/08 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
JS中FormData类实现文件上传
2020/03/27 Javascript
python2.7删除文件夹和删除文件代码实例
2013/12/18 Python
跟老齐学Python之正规地说一句话
2014/09/28 Python
Python实现二分查找算法实例
2015/05/26 Python
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
python-web根据元素属性进行定位的方法
2019/12/13 Python
简单了解python列表和元组的区别
2020/05/14 Python
Python实现一个优先级队列的方法
2020/07/31 Python
Pycharm Git 设置方法
2020/09/15 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
澳大利亚首屈一指的在线购物目的地:Kogan.com
2017/02/02 全球购物
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
毕业生医学检验求职信
2013/10/16 职场文书
公证委托书模板
2014/04/03 职场文书
入职担保书怎么写
2014/05/12 职场文书
社区维稳工作方案
2014/06/06 职场文书
财务会计专业自荐书
2014/06/30 职场文书
劳动争议仲裁代理词
2015/05/25 职场文书
2016大一新生军训感言
2015/12/08 职场文书