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 IE 浏览器判定代码
Mar 21 Javascript
jQuery中after的两种用法实例
Jul 03 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
Sep 13 Javascript
js实现简单登录功能的实例代码
Nov 09 Javascript
Javascript学习指南
Dec 01 Javascript
jQuery里filter()函数与find()函数用法分析
Jun 24 Javascript
原生JS实现网络彩票投注效果
Sep 25 Javascript
JavaScript中省略元素对数组长度的影响
Oct 26 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
Apr 24 Javascript
Vuejs在v-for中,利用index来对第一项添加class的方法
Mar 03 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
Apr 23 Javascript
.netcore+vue 实现压缩文件下载功能
Sep 24 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生成WAP页面
2006/10/09 PHP
php遍历数组的4种方法总结
2014/07/05 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
2018/01/29 PHP
PHP的PDO连接讲解
2019/01/24 PHP
JavaScript AJAX之惰性载入函数
2014/08/27 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
2016/06/21 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
原生js实现弹出层效果
2017/01/20 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
JS判断一个数是否是水仙花数
2017/06/11 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
vue 封装 Adminlte3组件的实现
2020/03/18 Javascript
从Python的源码浅要剖析Python的内存管理
2015/04/16 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
2016/06/27 Python
Python使用asyncio包处理并发详解
2017/09/09 Python
Python操作MongoDB数据库的方法示例
2018/01/04 Python
python批量替换多文件字符串问题详解
2018/04/22 Python
在pycharm上mongodb配置及可视化设置方法
2018/11/30 Python
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
5分钟 Pipenv 上手指南
2018/12/20 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
Python telnet登陆功能实现代码
2020/04/16 Python
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
个人实用的自我评价范文
2013/11/23 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
大型演出策划方案
2014/05/28 职场文书
2014年党支部工作总结
2014/11/13 职场文书
体育教师个人工作总结
2015/02/09 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
人与自然的观后感
2015/06/18 职场文书
2016大学生党校学习心得体会
2016/01/06 职场文书
会计手工模拟做账心得体会
2016/01/22 职场文书
MySQL 数据 data 基本操作
2022/05/04 MySQL