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 相关文章推荐
google 搜索框添加关键字实现代码
Apr 24 Javascript
2010年最佳jQuery插件整理
Dec 06 Javascript
javascript实现手机震动API代码
Aug 05 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
Sep 07 Javascript
javascript实现动态统计图开发实例
Nov 21 Javascript
全面了解JS中的匿名函数
Jun 29 Javascript
web 前端常用组件之Layer弹出层组件
Sep 22 Javascript
Angular 4依赖注入学习教程之简介(一)
Jun 04 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
Mar 17 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
May 05 Javascript
npm的lock机制解析
Jun 20 Javascript
原生js实现贪吃蛇游戏
Oct 26 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高级对象构建 工厂模式的使用
2012/02/05 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
一波PHP中cURL库的常见用法代码示例
2016/05/06 PHP
php版微信公众号接口实现发红包的方法
2016/10/14 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
Tab页界面,用jQuery及Ajax技术实现
2009/09/21 Javascript
JQuery从头学起第一讲
2010/07/04 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
2015/12/03 Javascript
jQuery+css实现的换页标签栏效果
2016/01/27 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
layui添加动态菜单与选项卡
2019/07/26 Javascript
vue页面跳转实现页面缓存操作
2020/07/22 Javascript
H5 js点击按钮复制文本到粘贴板
2020/11/19 Javascript
selenium + python 获取table数据的示例讲解
2018/10/13 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
2019/10/23 Python
如何现实servlet的单线程模式
2014/08/05 面试题
土木工程毕业生自荐信
2013/11/12 职场文书
银行职业规划书范文
2013/12/28 职场文书
总经理的岗位职责
2014/02/23 职场文书
养牛场项目建议书
2014/05/13 职场文书
主题团日活动总结
2014/06/25 职场文书
公司领导班子对照材料
2014/08/18 职场文书
协议书范文
2015/01/27 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
医院志愿者活动总结
2015/05/06 职场文书
2016新教师岗前培训心得体会
2016/01/08 职场文书
八年级作文之友谊
2019/12/02 职场文书