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 相关文章推荐
Javascript UrlDecode函数代码
Jan 09 Javascript
javascript函数中的arguments参数
Aug 01 Javascript
Javascript 自适应高度的Tab选项卡
Apr 05 Javascript
JQuery操作表格(隔行着色,高亮显示,筛选数据)
Feb 23 Javascript
JavaScript通过join函数连接数组里所有元素的方法
Mar 20 Javascript
学习vue.js表单控件绑定操作
Dec 05 Javascript
bootstrap table表格客户端分页实例
Aug 07 Javascript
Vue上传组件vue Simple Uploader的用法示例
Aug 25 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
Oct 31 Javascript
JS实现模糊查询带下拉匹配效果
Jun 21 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
May 21 Javascript
js实现点赞按钮功能的实例代码
Mar 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
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
详解EventDispatcher事件分发组件
2016/12/25 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
用jquery快速解决IE输入框不能输入的问题
2016/10/04 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
微信小程序实现吸顶特效
2020/01/08 Javascript
wxpython中利用线程防止假死的实现方法
2014/08/11 Python
Python中统计函数运行耗时的方法
2015/05/05 Python
python简单获取数组元素个数的方法
2015/07/13 Python
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
2019/04/11 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
Django在pycharm下修改默认启动端口的方法
2019/07/26 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
Keras官方中文文档:性能评估Metrices详解
2020/06/15 Python
Python select及selectors模块概念用法详解
2020/06/22 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
将世界上最美丽的摄影作品转化为艺术作品:Photos.com
2017/11/28 全球购物
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
房地产融资计划书
2014/01/10 职场文书
十岁生日父母答谢词
2014/01/18 职场文书
市场推广策划方案
2014/06/02 职场文书
防灾减灾活动总结
2014/08/30 职场文书
公司周年庆典致辞
2015/07/30 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
用Python创建简易网站图文教程
2021/06/11 Python