vue实现两个区域滚动条同步滚动


Posted in Vue.js onDecember 13, 2020

本文实例为大家分享了vue实现两个区域滚动条同步滚动的具体代码,供大家参考,具体内容如下

项目开发中,遇到一个比较两个form差异的需求,但当item过多就需要滚动条,这里就用到了滚动条同步的地方,其实原理和git的差异比较差不多,这里来做一下分析。

这是效果图:

vue实现两个区域滚动条同步滚动

要点分析:

其实主要是通过ref属性来操控两个div的scrollTop属性

<div class="customer-span" ref="systemForm" @scroll="sysHandleScroll()" @mouseover="changeFlag(false)">
 <div class="customer-span-form">
 <el-form label-suffix=":" class="form-static" label-position="right" label- 
 width="100px">
  <el-form-item v-for="(item, index) in formItem" :key="index" :label="item.label">
  {{ systemFormData[item.model] }}
  </el-form-item>
 </el-form>
 </div>
</div>
<div class="customer-span" ref='externalForm' @scroll="exterHandleScroll()" @mouseover="changeFlag(true)">
 <div class="customer-span-form">
 <el-form label-suffix=":" class="form-static" label-position="right" label- 
 width="100px">
  <el-form-item v-for="(item, index) in formItem" :key="index" :label="item.label">
  {{ externalFormData[item.model] }}
  </el-form-item>
  </el-form>
 </div>
</div>

js部分

data() {
 return {
 flag: false
 }
},
method: {
 changeFlag(flag) {
 this.flag = flag
 },
 // 左右滚动条滚动同步
 sysHandleScroll() {
 if (!this.flag) {
  this.$refs.externalForm.scrollTop = this.$refs.systemForm.scrollTop
 }
 },
 exterHandleScroll() {
 if (this.flag) {
  this.$refs.systemForm.scrollTop = this.$refs.externalForm.scrollTop
 }
 }
}

步骤解析:

1、首先你要给你的两个div设置固定高度,分别出现滚动条

2、然后再通过给两个div分别绑定ref属性

3、接下来给两个div添加scroll方法,监控滚动条变化

4、最后分别在方法里设置两个滚动条的scrollTop值一样

2020/7/31更新,解决滚轮滑动滚动条移动缓慢问题

感谢评论区小伙伴发现的bug,这里说一下原因和解决方案

发生原因:因为对两个div都添加了scroll方法,一个区域滚动会改变另外一个区域的scrollTop,但是同时触发了这个区域自己的scroll方法,又会进行改变,这样就形成了两个scroll的无限回调,最终发生了看到的结果,移动非常缓慢。

解决思路:大致思路是添加一个flag属性,两个scroll事件分别传入不同的值,再根据这个值去判断是否设置scrollTop属性,这样就不会造成无线循环,这里的flag属性需要在scroll事件之前传入,所以这里通过mouserover事件传入该属性。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
vue 表单输入框不支持focus及blur事件的解决方案
Nov 17 Vue.js
vue element实现表格合并行数据
Nov 30 Vue.js
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
vue实现树状表格效果
Dec 29 Vue.js
vue 实现图片懒加载功能
Dec 31 Vue.js
vue编写简单的购物车功能
Jan 08 Vue.js
Vue中的nextTick作用和几个简单的使用场景
Jan 25 Vue.js
基于vue的video播放器的实现示例
Feb 19 Vue.js
vue常用高阶函数及综合实例
Feb 25 Vue.js
Vue2.x-使用防抖以及节流的示例
Mar 02 Vue.js
vue如何在data中引入图片的正确路径
Jun 05 Vue.js
vue递归实现树形组件
Jul 15 Vue.js
vue实现滚动鼠标滚轮切换页面
Dec 13 #Vue.js
详解vue中使用transition和animation的实例代码
Dec 12 #Vue.js
详解如何在vue+element-ui的项目中封装dialog组件
Dec 11 #Vue.js
vue使用exif获取图片经纬度的示例代码
Dec 11 #Vue.js
vue使用exif获取图片旋转,压缩的示例代码
Dec 11 #Vue.js
Vue 实现一个简单的鼠标拖拽滚动效果插件
Dec 10 #Vue.js
vuex页面刷新导致数据丢失的解决方案
Dec 10 #Vue.js
You might like
php 301转向实现代码
2008/09/18 PHP
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
js创建数据共享接口——简化框架之间相互传值
2011/10/23 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
js控制div弹出层实现方法
2015/05/11 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
对Angular.js Controller如何进行单元测试
2016/10/25 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
微信小程序 云开发模糊查询实现解析
2019/09/02 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
js实现简单的日历显示效果函数示例
2019/11/25 Javascript
js实现橱窗展示效果
2020/01/11 Javascript
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
Python操作rabbitMQ的示例代码
2019/03/19 Python
python学习开发mock接口
2019/04/28 Python
BSTN意大利:德国街头和运动文化高品质商店
2020/12/22 全球购物
应聘美工求职信
2013/11/07 职场文书
大学生咖啡店创业计划书
2014/01/21 职场文书
国贸专业的职业规划书
2014/03/15 职场文书
文明和谐家庭事迹材料
2014/05/18 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
催款函范文
2015/06/24 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL