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使用vant中的checkbox实现全选功能
Nov 17 Vue.js
vue+iview实现文件上传
Nov 17 Vue.js
vue + el-form 实现的多层循环表单验证
Nov 25 Vue.js
Vue3+elementui plus创建项目的方法
Dec 01 Vue.js
Vue router传递参数并解决刷新页面参数丢失问题
Dec 02 Vue.js
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 Vue.js
jenkins自动构建发布vue项目的方法步骤
Jan 04 Vue.js
Vue中的nextTick作用和几个简单的使用场景
Jan 25 Vue.js
vue3.0中使用element的完整步骤
Mar 04 Vue.js
vue3.0 项目搭建和使用流程
Mar 04 Vue.js
VUE中的v-if与v-show区别介绍
Mar 13 Vue.js
vue 数字翻牌器动态加载数据
Apr 20 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数组总结篇(一)
2008/09/30 PHP
PHP Session机制简介及用法
2014/08/19 PHP
PHP多进程之pcntl_fork的实例详解
2017/10/15 PHP
PHP 的Opcache加速的使用方法
2017/12/29 PHP
javascript中style.left和offsetLeft的用法说明
2014/03/07 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
2016/01/01 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
jQuery绑定自定义事件的魔法升级版
2016/06/30 Javascript
JavaScript 中 apply 、call 的详解
2017/03/21 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
详解vue数组遍历方法forEach和map的原理解析和实际应用
2018/11/15 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
2019/05/23 jQuery
[01:19:23]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第二场
2018/04/06 DOTA
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
利用python程序帮大家清理windows垃圾
2017/01/15 Python
Python 模拟员工信息数据库操作的实例
2017/10/23 Python
Python爬虫抓取代理IP并检验可用性的实例
2018/05/07 Python
djang常用查询SQL语句的使用代码
2019/02/15 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
pytorch 共享参数的示例
2019/08/17 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
法国体育用品商店:GO Sport
2019/10/23 全球购物
委托证明的格式
2014/01/10 职场文书
公务员平时考核实施方案
2014/03/11 职场文书
旅游局领导班子“四风”问题对照检查材料思想汇报
2014/09/29 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
龙潭大峡谷导游词
2015/02/10 职场文书
公司处罚决定书
2015/06/24 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL