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中bind,live,delegate与one方法的用法及区别解析
Dec 30 Javascript
取得元素的左和上偏移量的方法
Sep 17 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
Mar 04 Javascript
jQuery取得iframe中元素的常用方法详解
Jan 14 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
Jun 16 Javascript
JavaScript实战(原生range和自定义特效)简单实例
Aug 21 Javascript
js事件冒泡与事件捕获详解
Feb 20 Javascript
jQuery日程管理控件glDatePicker用法详解
Mar 29 jQuery
详解webpack 如何集成第三方js库
Jun 29 Javascript
js编写简单的计时器功能
Jul 15 Javascript
vue实现点击追加选中样式效果
Nov 01 Javascript
uni-app从安装到卸载的入门教程
May 15 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 5.0对象模型深度探索之对象复制
2008/03/27 PHP
php MySQL与分页效率
2008/06/04 PHP
php阿拉伯数字转中文人民币大写
2015/12/21 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
Jquery AutoComplete自动完成 的使用方法实例
2010/03/19 Javascript
js null undefined 空区别说明
2010/06/13 Javascript
Firebug入门指南(Firefox浏览器)
2010/08/21 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
理解javascript中的严格模式
2016/02/01 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
2016/07/22 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
2019/11/18 jQuery
Vue 自适应高度表格的实现方法
2020/05/13 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
解决vue项目 build之后资源文件找不到的问题
2020/09/12 Javascript
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
2020/12/04 Vue.js
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
python 算法 排序实现快速排序
2012/06/05 Python
centos系统升级python 2.7.3
2014/07/03 Python
Python兔子毒药问题实例分析
2015/03/05 Python
python合并同类型excel表格的方法
2018/04/01 Python
Python用字典构建多级菜单功能
2019/07/11 Python
Python基于QQ邮箱实现SSL发送
2020/04/26 Python
使用Keras 实现查看model weights .h5 文件的内容
2020/06/09 Python
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
计算机专业毕业生的自我评价
2013/11/18 职场文书
高三自我评价
2014/02/01 职场文书
美术教学感言
2014/02/22 职场文书
中标通知书范本
2015/04/17 职场文书
无罪辩护词范文
2015/05/21 职场文书
心灵点滴观后感
2015/06/02 职场文书
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python