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 相关文章推荐
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
May 02 Javascript
javascript仿qq界面的折叠菜单实现代码
Dec 12 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
Jan 26 Javascript
Node.js 制作实时多人游戏框架
Jan 08 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
Aug 07 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
Dec 04 Javascript
Bootstrap Table的使用总结
Oct 08 Javascript
预防网页挂马的方法总结
Nov 03 Javascript
详解ES6之用let声明变量以及let loop机制
Jul 15 Javascript
微信小程序实现卡片左右滑动效果的示例代码
May 01 Javascript
js JSON.stringify()基础详解
Jun 19 Javascript
Vue中nprogress页面加载进度条的方法实现
Nov 13 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获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
jquery中常用的SET和GET
2009/01/13 Javascript
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
2013/10/14 Javascript
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
jquery实现静态搜索功能(可输入搜索文字)
2017/03/28 jQuery
jQuery+PHP+Mysql实现抽奖程序
2020/04/12 jQuery
vue.js中父组件调用子组件的内部方法示例
2017/10/22 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
2018/09/03 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
Python 的 Socket 编程
2015/03/24 Python
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
python字符串过滤性能比较5种方法
2017/06/22 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
python实现雨滴下落到地面效果
2018/06/21 Python
使用python将时间转换为指定的格式方法
2018/11/12 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
Python能做什么
2020/06/02 Python
Python通过字典映射函数实现switch
2020/11/06 Python
HTML5中的websocket实现直播功能
2018/05/21 HTML / CSS
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
网络专业学生个人的自我评价
2013/12/16 职场文书
《四季》教学反思
2014/04/08 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
五年级下册复习计划
2015/01/19 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书