组件全部代码
<template> <div class="goods"> <!--左侧区域--> <div class="menu-wrapper" ref="left"> <ul class="menu"> <li class="menu-item border-bottom" :class="{'current':currentIndex===index}" v-for="(item,index) in dataLlist.goods" :key="index" @click="selectIndex(index,$event)" ref="menuList" > <div class="text"> <goods-icon v-show="item.type>0" :index="item.type" class="text-ico"></goods-icon> {{item.name}} </div> </li> </ul> </div> <!--右侧区域--> <div class="foods-wrapper" ref="right"> <ul> <li class="food-list food-list-hook" v-for="(item,index) in dataLlist.goods" :key="index"> <!--标题区域--> <h1 class="border-left">{{item.name}}</h1> <ul> <li class="food-item border-bottom" v-for="(foodItem,index) in item.foods" > <div class="food-image"> <img :src="/UploadFiles/2021-04-02/foodItem.icon">Vue项目中使用better-scroll实现菜单滑动功能
安装和在组件中引入better-scroll
npm install better-scroll --save引入import BScroll from 'better-scroll' 【在组件中引入,在后续的export default中就可以直接使用封装好的better-scroll功能了】
better-scroll实现的下面功能
在菜单中要实现点击左侧菜单的食品类型名称,右侧就会自动滑动到此食品类型下的所有食品;在右侧区域中滑动到食品类型下的所有食品区域下的时候,左侧菜单会出现相应的高亮效果
如何实现上面的功能:
第一:需要知道要在哪些区域间实现滑动
第二:通过new BScroll()获取要实现滑动的区域
this.meunScroll=new BScroll(this.$refs.left); this.foodScroll=new BScroll(this.$refs.right);第三:上面代码在理论上应该在相应的区域都应该能滑动了,但是现实是并不能滑动
原因是:数据的获取是异步获取的,在定义滑动区域的时候,也许数据还没有更新,这是this.meunScroll的高度可能就没有高度外部类goods的高度,这样就不会滑动。
解决的方法:this.$nextTick()将回调延迟到下次 DOM 更新循环之后执行,使用$nextTick异步初始化Bscroll
this.$nextTick(()=>{ //this.$nextTick()将回调延迟到下次 DOM 更新循环之后执行,使用$nextTick异步初始化Bscroll this.meunScroll=new BScroll(this.$refs.left,{ click:true //左侧菜单可以进行点击事件 }); this.foodScroll=new BScroll(this.$refs.right,{ probeType: 3 //可以派发scroll事件,检测到实时滚动的位置 }); 【this.foodScroll中必须有 probeType: 3后才能进行下面的scroll事件】 this.foodScroll.on('scroll',(pos) =>{ //参数pos就是在右侧区域滑动的实时位置 //Math.round()取整数,Math.abs取绝对值 this.scrollY =Math.abs( Math.round(pos.y)); }); this._calculateHeight(); //这个方法为了获取每个商品类的最大区间的高度 })获取每个右侧区域的 <li class="food-list food-list-hook">的高度
在data中定义一个空listHeight数组;数组中的元素代表了每个li到this.foodScroll最顶部的区域高度;
_calculateHeight(){ //这个方法为了获取每个商品类的最大区间的高度
let height = 0; let foodLsit = this.$refs.right.getElementsByClassName('food-list-hook'); this.listHeight.push(height); //listHeight这个数组是用来存放右侧商品中每个类型商品的最大区间高度的集合 for(var i=0;i<foodLsit.length;i++){ let item = foodLsit[i]; //clientHeight代表元素的高度 height += item.clientHeight; //每个元素的高度等于自身高度加上上一个元素的高度 this.listHeight.push(height); //最终listHeight集合了所有li[类为food-list-hook]到最顶部的高度 } }, let foodLsit = this.$refs.right.getElementsByClassName('food-list-hook');foodLsit表示所有li【 <li class="food-list food-list-hook">】dom集合;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]