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 相关文章推荐
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
Mar 20 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
Jun 10 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
Jul 01 Javascript
详解angularJs指令的3种绑定策略
Apr 13 Javascript
Angular中使用$watch监听object属性值的变化(详解)
Apr 24 Javascript
AngularJS路由Ui-router模块用法示例
May 29 Javascript
妙用缓存调用链实现JS方法的重载
Apr 30 Javascript
js 实现在2d平面上画8的方法
Oct 10 Javascript
详解一个基于套接字实现长连接的express
Mar 28 Javascript
详解vue中axios请求的封装
Apr 08 Javascript
pm2启动ssr失败的解决方法
Jun 29 Javascript
JS中多层次排序算法的实现代码
Jan 06 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
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
PHP教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
php学习之function的用法
2012/07/14 PHP
使用PHP获取当前url路径的函数以及服务器变量
2013/06/29 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
javascript 面向对象编程基础:继承
2009/08/21 Javascript
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
京东优选小程序的实现代码示例
2020/02/25 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
Python实现身份证号码解析
2015/09/01 Python
Python实现简单登录验证
2016/04/13 Python
浅谈Python基础之I/O模型
2017/05/11 Python
详细分析python3的reduce函数
2017/12/05 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
python 编码规范整理
2018/05/05 Python
利用anaconda保证64位和32位的python共存
2021/03/09 Python
python移位运算的实现
2019/07/15 Python
详解Python time库的使用
2019/10/10 Python
python网络编程之五子棋游戏
2020/05/14 Python
Python中对象的比较操作==和is区别详析
2021/02/12 Python
CSS3 简单又实用的5个属性
2010/03/04 HTML / CSS
美国折扣网站:jClub
2017/08/07 全球购物
泰国综合购物网站:Lazada泰国
2018/04/09 全球购物
信息学院毕业生自荐信范文
2014/03/04 职场文书
高职教师先进事迹材料
2014/08/24 职场文书
个人总结与自我评价
2015/02/14 职场文书
500字小学生检讨书
2015/02/19 职场文书
中标通知书格式
2015/04/17 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
Python3中最常用的5种线程锁实例总结
2021/07/07 Python