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 相关文章推荐
DOM 中的事件处理介绍
Jan 18 Javascript
js展开闭合效果演示代码
Jul 24 Javascript
Vue组件BootPage实现简单的分页功能
Sep 12 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
Oct 17 Javascript
详解Jquery的事件操作和文档操作
Dec 19 Javascript
微信小程序实现美团菜单
Jun 06 Javascript
解决angularJS中input标签的ng-change事件无效问题
Sep 13 Javascript
微信小程序开发常见问题及解决方案
Jul 11 Javascript
vue data恢复初始化数据的实现方法
Oct 31 Javascript
Vue 中获取当前时间并实时刷新的实现代码
May 12 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
Sep 22 Javascript
浅谈Vue使用Elementui修改默认的最快方法
Dec 05 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
PHP 中英文混合排版中处理字符串常用的函数
2007/04/12 PHP
同台服务器使用缓存APC效率高于Memcached的演示代码
2010/02/16 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
向当前style sheet中插入一个新的style实现方法
2013/04/01 Javascript
通过一段代码简单说js中的this的使用
2013/07/23 Javascript
使用JQuery FancyBox插件实现图片展示特效
2015/11/16 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
2016/07/22 Javascript
JavaScript 控制字体大小设置的方法
2016/11/23 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
[45:38]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第一局
2016/03/02 DOTA
Pandas统计重复的列里面的值方法
2019/01/30 Python
手写一个python迭代器过程详解
2019/08/27 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
html5 学习简单的拾色器
2010/09/03 HTML / CSS
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
清明节网上祭英烈活动总结
2014/04/30 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
2015年药房工作总结
2015/04/25 职场文书
本科毕业答辩开场白
2015/05/27 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
MySQL锁机制
2021/04/05 MySQL
python中的None与NULL用法说明
2021/05/25 Python
python读取mat文件生成h5文件的实现
2022/07/15 Python