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在图片上传的时候压缩图片
Nov 18 Vue.js
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
Vue3 实现双盒子定位Overlay的示例
Dec 22 Vue.js
解决vue使用vant轮播组件swipe + flex时文字抖动问题
Jan 07 Vue.js
vue.js实现点击图标放大离开时缩小的代码
Jan 27 Vue.js
聊聊vue 中的v-on参数问题
Jan 29 Vue.js
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
开发一个封装iframe的vue组件
Mar 29 Vue.js
vue如何批量引入组件、注册和使用详解
May 12 Vue.js
Vue全局事件总线你了解吗
Feb 24 Vue.js
vue3引入highlight.js进行代码高亮的方法实例
Apr 08 Vue.js
vue使用localStorage持久性存储实现评论列表
Apr 14 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与ASP
2006/10/09 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
2015/11/30 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
2016/12/08 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
2014/10/31 Javascript
JavaScript中的依赖注入详解
2015/03/18 Javascript
javascript的 {} 语句块详解
2016/02/27 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
js实现下一页页码效果
2017/03/07 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
微信小程序如何利用getCurrentPages进行页面传值
2019/07/01 Javascript
浅谈JavaScript中this的指向更改
2020/07/28 Javascript
python正则表达式及使用正则表达式的例子
2018/01/22 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
解决Python3下map函数的显示问题
2019/12/04 Python
python 实现dict转json并保存文件
2019/12/05 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
django 解决自定义序列化返回处理数据为null的问题
2020/05/20 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
香港No.1得奖零食网:香港零食大王
2016/07/22 全球购物
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
文秘专业个人求职信
2013/12/22 职场文书
听课评语大全
2014/04/30 职场文书
主题班会演讲稿
2014/05/22 职场文书
体操比赛口号
2014/06/10 职场文书
体育课外活动总结
2014/07/08 职场文书
工作会议简报
2015/07/20 职场文书
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle