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 相关文章推荐
纯js实现背景图片切换效果代码
Nov 14 Javascript
jQuery中detach()方法用法实例
Dec 25 Javascript
javascript封装简单实现方法
Aug 11 Javascript
基于Angularjs实现分页功能
May 30 Javascript
AngularJS Bootstrap详细介绍及实例代码
Jul 28 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
Nov 09 Javascript
使用Ajax生成的Excel文件并下载的实例
Nov 21 Javascript
ES6中Iterator与for..of..遍历用法分析
Mar 31 Javascript
Vuejs监听vuex中值的变化的方法示例
Dec 02 Javascript
vue搜索和vue模糊搜索代码实例
May 07 Javascript
VUE注册全局组件和局部组件过程解析
Oct 10 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
Feb 10 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的debug相关函数用法示例
2016/07/11 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
2017/07/03 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
Window.Open如何在同一个标签页打开
2014/06/20 Javascript
javascript去除空格方法小结
2015/05/21 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
jQuery实现动态添加、删除按钮及input输入框的方法
2017/04/27 jQuery
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
Cordova(ionic)项目实现双击返回键退出应用
2019/09/17 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
2020/12/08 Vue.js
[00:36]DOTA2勇士令状莱恩声望物品——冥晶之厄展示
2018/05/25 DOTA
微信跳一跳游戏python脚本
2020/04/01 Python
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
Python lambda函数基本用法实例分析
2018/03/16 Python
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
Flask之flask-session的具体使用
2018/07/26 Python
pycharm重置设置,恢复默认设置的方法
2018/10/22 Python
对python pandas读取剪贴板内容的方法详解
2019/01/24 Python
简单了解pytest测试框架setup和tearDown
2020/04/14 Python
哪些是python中web开发框架
2020/06/17 Python
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
个人作风剖析材料
2014/02/02 职场文书
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
奥利奥广告词
2014/03/20 职场文书
个人原因辞职信模板
2015/05/13 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书
建房合同协议书
2016/03/21 职场文书
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python
SQL SERVER中的流程控制语句
2022/05/25 SQL Server