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基础篇
Nov 13 Javascript
js null,undefined,字符串小结
Aug 21 Javascript
通过jquery还原含有rowspan、colspan的table的实现方法
Feb 10 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
May 19 Javascript
Javascript之Number对象介绍
Jun 07 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
Jan 18 Javascript
vue.js的安装方法
May 12 Javascript
JavaScript之面向对象_动力节点Java学院整理
Jun 29 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
Sep 20 Javascript
vue.js如何将echarts封装为组件一键使用详解
Oct 10 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
Apr 30 Javascript
微信小程序用户授权最佳实践指南
May 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
PHP个人网站架设连环讲(二)
2006/10/09 PHP
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
PHP批量采集下载美女图片的实现代码
2013/06/03 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
小议javascript 设计模式 推荐
2009/10/28 Javascript
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
javascript动态生成树形菜单的方法
2015/11/14 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
基于Vue实例生命周期(全面解析)
2017/08/16 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
小程序实现留言板
2018/11/02 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
Python中用Descriptor实现类级属性(Property)详解
2014/09/18 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
Python编程快速上手——正则表达式查找功能案例分析
2020/02/28 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
新手学习Python2和Python3中print不同的用法
2020/06/09 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
基于python+selenium自动健康打卡的实现代码
2021/01/13 Python
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
电子商务专业个人的自我评价
2013/11/19 职场文书
物流专员岗位职责
2014/02/17 职场文书
聘任书模板
2014/03/29 职场文书
七年级思品教学反思
2016/02/20 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书
pytorch查看网络参数显存占用量等操作
2021/05/12 Python
深入讲解Vue中父子组件通信与事件触发
2022/03/22 Vue.js