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编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
Dec 02 Vue.js
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 Vue.js
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
详解为什么Vue中的v-if和v-for不建议一起用
Jan 13 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
如何在 Vue 中使用 JSX
Feb 14 Vue.js
Vue中避免滥用this去读取data中数据
Mar 02 Vue.js
Vue2.0搭建脚手架
Mar 13 Vue.js
Vue组件更新数据v-model不生效的解决
Apr 02 Vue.js
vue特效之翻牌动画
Apr 20 Vue.js
Vue深入理解插槽slot的使用
Aug 05 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基础知识:函数基础知识
2006/12/13 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
php随机抽奖实例分析
2015/03/04 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
2015/10/19 PHP
jQuery数组处理代码详解(含实例演示)
2012/02/03 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
jQuery.holdReady()方法用法实例
2014/12/27 Javascript
基于jQuery ligerUI实现分页样式
2016/09/18 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
vue的toast弹窗组件实例详解
2018/05/14 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
对angular4子路由&amp;辅助路由详解
2018/10/09 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
2019/11/19 Javascript
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
Python 中的with关键字使用详解
2016/09/11 Python
python 获得任意路径下的文件及其根目录的方法
2019/02/16 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
appium+python adb常用命令分享
2020/03/06 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
Sephora丝芙兰菲律宾官方网站:购买化妆品和护肤品
2017/04/05 全球购物
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
厨师岗位职责
2013/11/12 职场文书
电子商务网站的创业计划书
2014/01/05 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
党性心得体会
2014/09/03 职场文书
2014年手术室工作总结
2014/11/26 职场文书
党支部考察意见范文
2015/06/02 职场文书
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
Windows server 2016服务器基本设置
2022/08/14 Servers