vue中实现左右联动的效果


Posted in Javascript onJune 22, 2018

这里的坑还是蛮多的,花了一个多小时,才理清楚。

 做一下笔记,以便于复习。

vue中实现左右联动的效果

首先呢,需要让左右的布局都可以滚动,这里使用了betterScroll

npm i better-scroll
import BScroll from 'better-scroll'
methods: {
  _initScroll () {
   this.menuScroll = new BScroll((this.$refs.menu), {
    click: true
    因为betterscroll默认会阻止点击事件。这里要设置一下
   })
   this.foodScroll = new BScroll((this.$refs.good), {
    probeType: 3
    用来获取滚动的距离
   })
   this.foodScroll.on('scroll', (pos) => {
    this.scrollY = Math.abs(Math.round(pos.y))
   })
  },

重点:

created () {
  this.$ajax.get('/api/data.json').then((res) => {
   this.goods = res.data.goods
   this.$nextTick(() => {
    this._initScroll()
    this.getGoodsHeight()
   })
  })
 },

这里的代码一定要在获取数据里面写nextTick()回调里面写代码,因为需要等待数据万泉加载再去初始化scroll和获取右边每一个盒子的高度。

说道高度,高度如何获取呢?

getGoodsHeight () {
   let goodEle = this.$refs.good
   let height = 0
   this.listHeight.push(height)
   let foodList = goodEle.getElementsByClassName('goodsItemHook')
   for (let i = 0; i < foodList.length; i++) {
    let item = foodList[i]
    height += item.clientHeight
    this.listHeight.push(height)
   }
  },

这里是获取到每一个盒子的clientHeight的高度进行叠加,在push到一个数组里面。

this.foodScroll.on('scroll', (pos) => {
    this.scrollY = Math.abs(Math.round(pos.y))
   })

获取滚动的值,赋值给scrollY。

然后根据scrollY 和listHeight的高度区间做对比,拿到index:

currentIndex () {
   for (let i = 0; i < this.listHeight.length; i++) {
    let height1 = this.listHeight[i]
    let height2 = this.listHeight[i + 1]
    if (!height2 || (this.scrollY < height2 && this.scrollY >= height1)) {
     return i
    }
   }
  }

这时候滚动就能获取index的值了,然后给左边的元素去添加active的样式就方便了。

:class="{'active': currentIndex == index}"

最后一步是如何实现点击的时候去让右边的滚动到指定的位置。

handleGoodsItem (index) {
   let goodEle = this.$refs.good
   let foodList = goodEle.getElementsByClassName('goodsItemHook')
   let el = foodList[index]
   this.foodScroll.scrollToElement(el, 300)
  }

这里调用了scroll的方法:scrollToElement。

总结

以上所述是小编给大家介绍的vue中实现左右联动的效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Jquery优化效率 提升性能解决方案
Sep 06 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
Apr 12 Javascript
jQuery动画效果-slideUp slideDown上下滑动示例代码
Aug 28 Javascript
浅析node.js中close事件
Nov 26 Javascript
jQuery中replaceAll()方法用法实例
Jan 16 Javascript
js操作XML文件的实现方法兼容IE与FireFox
Jun 25 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
Aug 17 Javascript
jQuery加密密码到cookie的实现代码
Apr 18 jQuery
jQuery实现选中行变色效果(实例讲解)
Jul 06 jQuery
详解node.js 下载图片的 2 种方式
Mar 02 Javascript
命令行批量截图Node脚本示例代码
Jan 25 Javascript
JS实现页面炫酷的时钟特效示例
Aug 14 Javascript
JS实现关键词高亮显示正则匹配
Jun 22 #Javascript
JS获取指定月份的天数两种实现方法
Jun 22 #Javascript
vue实现点击当前标签高亮效果【推荐】
Jun 22 #Javascript
vue中使用element-ui进行表单验证的实例代码
Jun 22 #Javascript
QQ跳转支付宝并自动领红包脚本(最新)
Jun 22 #Javascript
JavaScript 下载svg图片为png格式
Jun 21 #Javascript
MVVM 双向绑定的实现代码
Jun 21 #Javascript
You might like
杏林同学录(二)
2006/10/09 PHP
基于OpenCV的PHP图像人脸识别技术
2009/10/11 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
javascript 主动派发事件总结
2011/08/09 Javascript
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
2015/03/03 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
基于jquery实现左右按钮点击的图片切换效果
2021/01/27 Javascript
jquery实现简单的遮罩层
2016/01/08 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
微信小程序 用户数据解密详细介绍
2017/01/09 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
JavaScript位置参数实现原理及过程解析
2020/09/14 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
2015/05/20 Python
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
python实现tail -f 功能
2020/01/17 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
Python 存取npy格式数据实例
2020/07/01 Python
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
学前教育专业毕业生自荐信
2013/10/03 职场文书
计算机专业毕业生求职信分享
2013/12/24 职场文书
说明书范文
2014/05/07 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
教师工作表现自我评价
2015/03/05 职场文书
党员违纪检讨书
2015/05/05 职场文书
鲁滨逊漂流记读书笔记
2015/06/26 职场文书
蓝牙耳机怎么连接电脑win11? Win11蓝牙耳机连接电脑的技巧
2023/01/09 数码科技