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初学者需要了解10个小技巧
Aug 25 Javascript
JS常见问题整理(持续更新)
Aug 06 Javascript
jQuery遍历对象、数组、集合实例
Nov 08 Javascript
60个很实用的jQuery代码开发技巧收集
Dec 15 Javascript
jquery实现炫酷的叠加层自动切换特效
Feb 01 Javascript
JS加载器如何动态加载外部js文件
May 26 Javascript
bootstrapValidator 重新启用提交按钮的方法
Feb 20 Javascript
javascript图片预览和上传(兼容IE)
Mar 15 Javascript
vue下拉菜单组件(含搜索)的实现代码
Nov 25 Javascript
vue组件间的参数传递实例详解
Apr 26 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
May 12 Javascript
详解JavaScript类型判断的四种方法
Oct 21 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
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
setTimeout 不断吐食CPU的问题分析
2009/04/01 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
Angular2库初探
2017/03/01 Javascript
原生js轮播特效
2017/05/18 Javascript
JavaScript 基础表单验证示例(纯Js实现)
2017/07/20 Javascript
深入理解 Koa 框架中间件原理
2018/10/18 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
Element InputNumber 计数器的实现示例
2020/08/03 Javascript
Django实现图片文字同时提交的方法
2015/05/26 Python
Python 编码处理-str与Unicode的区别
2016/09/06 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
老生常谈Python进阶之装饰器
2017/05/11 Python
python根据unicode判断语言类型实例代码
2018/01/17 Python
django解决跨域请求的问题
2018/11/11 Python
带你认识Django
2019/01/15 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
python 实现目录复制的三种小结
2019/12/04 Python
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
财务会计人员岗位职责
2013/11/30 职场文书
年会活动策划方案
2014/01/23 职场文书
航海技术专业毕业生求职信
2014/04/06 职场文书
继承公证书
2014/04/09 职场文书
4s店活动策划方案
2014/08/25 职场文书
咖啡厅商业计划书
2014/09/15 职场文书
2014年初级职称工作总结
2014/12/08 职场文书
小学元宵节活动总结
2015/02/06 职场文书
房地产销售主管岗位职责
2015/02/13 职场文书
Python实现GIF动图以及视频卡通化详解
2021/12/06 Python
详解flex:1什么意思
2022/07/23 HTML / CSS