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实现的可以编辑选择的下拉框的代码
Nov 19 Javascript
Javascript写入txt和读取txt文件示例
Feb 12 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
Jul 15 Javascript
javascript单页面手势滑屏切换原理详解
Mar 21 Javascript
AngularJS动态生成div的ID源码解析
Aug 29 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
Dec 21 Javascript
JavaScript之iterable_动力节点Java学院整理
Jun 29 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
Feb 18 jQuery
解决layer弹出层中表单不起作用的问题
Sep 09 Javascript
vant自定义二级菜单操作
Nov 02 Javascript
详解React中共享组件逻辑的三种方式
Feb 02 Javascript
基于angular实现树形二级表格
Oct 16 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
异世界新番又来了,同样是从零开始,男主的年龄降到5岁
2020/04/09 日漫
PHP PDO fetch 模式各种参数的输出结果一览
2015/01/07 PHP
PHP PDOStatement::debugDumpParams讲解
2019/01/30 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
Div自动滚动到末尾的代码
2008/10/26 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
2014/04/20 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
利用JS如何计算字符串所占字节数示例代码
2017/09/13 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
Python天气预报采集器实现代码(网页爬虫)
2012/10/07 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
python单线程下实现多个socket并发过程详解
2019/07/27 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
css3的transition效果和transfor效果示例介绍
2013/10/30 HTML / CSS
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
Fanatics法国官网:美国体育电商
2019/08/27 全球购物
电子信息毕业生自荐信
2013/11/16 职场文书
网络工程师专家职业发展路线
2014/02/14 职场文书
工商治理实习生的自我评价分享
2014/02/20 职场文书
机关单位人员学雷锋心得体会
2014/03/10 职场文书
道路建设实施方案
2014/03/18 职场文书
药剂专业自荐书
2014/06/20 职场文书
小学英语教学经验交流材料
2015/11/02 职场文书
2016年社区文体活动总结
2016/04/06 职场文书
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server