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 数据类型转换(parseInt,parseFloat)
Jul 20 Javascript
ASP中Sub和Function的区别说明
Aug 30 Javascript
jquery聚焦文本框与扩展文本框聚焦方法
Oct 12 Javascript
JS+CSS实现简易的滑动门效果代码
Sep 24 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
Dec 21 Javascript
详解JavaScript对象的深浅复制
Mar 30 Javascript
Vue.JS项目中5个经典Vuex插件
Nov 28 Javascript
js读取本地文件的实例
Dec 22 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
May 08 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
Apr 27 Javascript
js+css3实现炫酷时钟
Aug 18 Javascript
JS数组转字符串实现方法解析
Sep 04 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
php array_slice函数的使用以及参数详解
2008/08/30 PHP
解密ThinkPHP3.1.2版本之模板继承
2014/06/19 PHP
PHP实现一个简单url路由功能实例
2016/11/05 PHP
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
js拦截alert对话框另类应用
2013/01/16 Javascript
NodeJS学习笔记之Http模块
2015/01/13 NodeJs
浅谈JavaScript中Date(日期对象),Math对象
2015/02/05 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
2015/06/22 Javascript
js实现仿阿里巴巴城市选择框效果实例
2015/06/24 Javascript
JS实现的自定义右键菜单实例二则
2015/09/01 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
2016/01/18 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
解决layui checkbox 提交多个值的问题
2019/09/02 Javascript
node使用request请求的方法
2019/12/20 Javascript
angularjs模态框的使用代码实例
2019/12/20 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
python实现汉诺塔方法汇总
2016/07/25 Python
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
python实现图片文件批量重命名
2020/03/23 Python
将Django项目部署到CentOs服务器中
2018/10/18 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
python实现多线程端口扫描
2019/08/31 Python
使用CSS3实现多列布局与多背景的技巧
2016/02/29 HTML / CSS
高中生学习生活的自我评价
2013/11/27 职场文书
网上商城创业计划书范文
2014/01/31 职场文书
大学生励志演讲稿
2014/04/25 职场文书
应届大学生自荐书
2014/06/17 职场文书
办公室主任个人总结
2015/02/28 职场文书
硕士论文致谢范文
2015/05/14 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android