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 节点操作 以及DOMDocument属性和方法
Dec 06 Javascript
基于Jquery的仿照flash放大图片效果代码
Mar 16 Javascript
jQuery学习笔记 操作jQuery对象 属性处理
Sep 19 Javascript
js验证模型自我实现的具体方法
Jun 21 Javascript
了解了这些才能开始发挥jQuery的威力
Oct 10 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
Aug 26 Javascript
Google 地图API Map()构造器详解
Aug 06 Javascript
javascript基本数据类型及类型检测常用方法小结
Dec 14 Javascript
微信小程序实现图片翻转效果的实例代码
Sep 20 Javascript
vue中get请求如何传递数组参数的方法示例
Nov 08 Javascript
js实现旋转木马轮播图效果
Jan 10 Javascript
JavaScript中的宏任务和微任务详情
Nov 27 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
2.PHP入门
2006/10/09 PHP
?算你??的 PHP 程式大小
2006/12/06 PHP
教你如何快捷的使用cmd访问mysql小技巧
2014/05/26 PHP
Yii框架上传图片用法总结
2016/03/28 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
JQuery validate插件验证用户注册信息
2016/05/11 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
原生js实现无限循环轮播图效果
2017/01/20 Javascript
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
2019/05/16 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
微信小程序实现同时上传多张图片
2020/02/03 Javascript
js实现表格数据搜索
2020/08/09 Javascript
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python单链表实现代码实例
2013/11/21 Python
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
python pandas dataframe 按列或者按行合并的方法
2018/04/12 Python
Django中使用Celery的方法示例
2018/11/29 Python
python写程序统计词频的方法
2019/07/29 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
Python urllib3软件包的使用说明
2020/11/18 Python
全面总结使用CSS实现水平垂直居中效果的方法
2016/03/10 HTML / CSS
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
英国领先的豪华时尚家居网上商店:Amara
2019/08/12 全球购物
大专学生推荐信范文
2013/11/19 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
监督检查工作方案
2014/05/28 职场文书
安全例会汇报材料
2014/08/23 职场文书
创先争优宣传标语
2014/10/08 职场文书
工伤事故处理协议书怎么写
2014/10/15 职场文书
开业典礼致辞
2015/07/29 职场文书