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-drawer-layout实现手势滑出菜单栏
Nov 19 Vue.js
vue单元格多列合并的实现
Nov 26 Vue.js
vue开发chrome插件,实现获取界面数据和保存到数据库功能
Dec 01 Vue.js
Vue router传递参数并解决刷新页面参数丢失问题
Dec 02 Vue.js
对vue生命周期的深入理解
Dec 03 Vue.js
Vue如何跨组件传递Slot的实现
Dec 14 Vue.js
Vue-router中hash模式与history模式的区别详解
Dec 15 Vue.js
vue中如何添加百度统计代码
Dec 19 Vue.js
如何管理Vue中的缓存页面
Feb 06 Vue.js
Vue实现下拉加载更多
May 09 Vue.js
vue3中provide && inject的使用
Jul 01 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 zend 相对路径问题
2009/01/12 PHP
php is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
PHP url 加密解密函数代码
2011/08/26 PHP
如何用PHP实现插入排序?
2013/04/10 PHP
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
javascript中的location用法简单介绍
2007/03/07 Javascript
jQuery中的常用事件总结
2009/12/27 Javascript
js 用CreateElement动态创建标签示例
2013/11/20 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
简化版手机端照片预览组件
2015/04/13 Javascript
jQuery实现进度条效果代码
2015/12/17 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
2016/01/26 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
使用react-router4.0实现重定向和404功能的方法
2017/08/28 Javascript
php中and 和 &amp;&amp;出坑指南
2018/07/13 Javascript
微信小程序使用swiper组件实现类3D轮播图
2018/08/29 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
探究数组排序提升Python程序的循环的运行效率的原因
2015/04/01 Python
Python实现字典去除重复的方法示例
2017/07/31 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
python 利用pyttsx3文字转语音过程详解
2019/09/25 Python
Django 批量插入数据的实现方法
2020/01/12 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
特色蛋糕店创业计划书
2014/01/28 职场文书
开业庆典策划方案
2014/02/18 职场文书
《骆驼和羊》教学反思
2014/02/27 职场文书
学校百日安全生产活动总结
2014/07/05 职场文书
授权委托书(完整版)
2014/09/10 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
浅谈mysql返回Boolean类型的几种情况
2021/06/04 MySQL
Python实现简单的俄罗斯方块游戏
2021/09/25 Python
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android