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 loading效果代码
Jun 18 Javascript
javascript 写类方式之一
Jul 05 Javascript
javascript实现图片切换的幻灯片效果源代码
Dec 12 Javascript
图片上传判断及预览脚本的效果实例
Aug 07 Javascript
js获取select标签选中值的两种方式
Jan 09 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
Mar 02 Javascript
jQuery Dialog 取消右上角删除按钮事件
Sep 07 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
Oct 14 Javascript
jQuery选择器之子元素过滤选择器
Sep 28 jQuery
JavaScript中使用import 和require打包后实现原理分析
Mar 07 Javascript
微信小程序功能之全屏滚动效果的实现代码
Nov 22 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
Mar 02 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
php获取数组中重复数据的两种方法
2013/06/28 PHP
PHP实现设计模式中的抽象工厂模式详解
2014/10/11 PHP
使用PHP uniqid函数生成唯一ID
2015/11/18 PHP
js 覆盖和重载 函数
2009/09/25 Javascript
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
sea.js常用的api简易文档
2016/11/15 Javascript
老生常谈的跨域处理
2017/01/11 Javascript
原生JavaScript实现AJAX、JSONP
2017/02/07 Javascript
jQuery html表格排序插件tablesorter使用方法详解
2017/02/10 Javascript
正则验证小数点后面只能有两位数的方法
2017/02/28 Javascript
微信小程序开发之路由切换页面重定向问题
2018/09/18 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
js Array.slice的8种不同用法示例
2019/07/10 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
python自动12306抢票软件实现代码
2018/02/24 Python
python执行CMD指令,并获取返回的方法
2018/12/19 Python
Python高斯消除矩阵
2019/01/02 Python
如何使用Python 打印各种三角形
2019/06/28 Python
python 如何将数据写入本地txt文本文件的实现方法
2019/09/11 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
西班牙在线药店:DosFarma
2020/03/28 全球购物
应届生法律求职信
2013/10/22 职场文书
教学个人的自我评价分享
2014/02/16 职场文书
传承焦裕禄精神思想汇报2014
2014/09/10 职场文书
2014年法院个人工作总结
2014/12/17 职场文书
房产公证书样本
2015/01/23 职场文书
法制教育观后感
2015/06/17 职场文书
《去年的树》教学反思
2016/02/18 职场文书
Python+Tkinter制作专属图形化界面
2022/04/01 Python
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL