vue實(shí)現(xiàn)兩個區(qū)域滾動條同步滾動
本文實(shí)例為大家分享了vue實(shí)現(xiàn)兩個區(qū)域滾動條同步滾動的具體代碼,供大家參考,具體內(nèi)容如下
項(xiàng)目開發(fā)中,遇到一個比較兩個form差異的需求,但當(dāng)item過多就需要滾動條,這里就用到了滾動條同步的地方,其實(shí)原理和git的差異比較差不多,這里來做一下分析。
這是效果圖:

要點(diǎn)分析:
其實(shí)主要是通過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設(shè)置固定高度,分別出現(xiàn)滾動條
2、然后再通過給兩個div分別綁定ref屬性
3、接下來給兩個div添加scroll方法,監(jiān)控滾動條變化
4、最后分別在方法里設(shè)置兩個滾動條的scrollTop值一樣
2020/7/31更新,解決滾輪滑動滾動條移動緩慢問題
感謝評論區(qū)小伙伴發(fā)現(xiàn)的bug,這里說一下原因和解決方案
發(fā)生原因:因?yàn)閷蓚€div都添加了scroll方法,一個區(qū)域滾動會改變另外一個區(qū)域的scrollTop,但是同時觸發(fā)了這個區(qū)域自己的scroll方法,又會進(jìn)行改變,這樣就形成了兩個scroll的無限回調(diào),最終發(fā)生了看到的結(jié)果,移動非常緩慢。
解決思路:大致思路是添加一個flag屬性,兩個scroll事件分別傳入不同的值,再根據(jù)這個值去判斷是否設(shè)置scrollTop屬性,這樣就不會造成無線循環(huán),這里的flag屬性需要在scroll事件之前傳入,所以這里通過mouserover事件傳入該屬性。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
mpvue 項(xiàng)目初始化及實(shí)現(xiàn)授權(quán)登錄的實(shí)現(xiàn)方法
這篇文章主要介紹了mpvue 項(xiàng)目初始化及實(shí)現(xiàn)授權(quán)登錄的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
在Vue中實(shí)現(xiàn)二維碼生成與掃描功能的方法
二維碼是一種廣泛應(yīng)用于各種場合的編碼方式,它可以將信息編碼成一張二維圖案,方便快捷地傳遞信息,在Vue.js中,我們可以使用一些庫和組件來實(shí)現(xiàn)二維碼的生成和掃描,本文將介紹如何在Vue中實(shí)現(xiàn)二維碼的生成和掃描的方法2023-06-06
使用vue與jquery實(shí)時監(jiān)聽用戶輸入狀態(tài)的操作代碼
本文是腳本之家小編給大家?guī)淼氖褂胿ue與jquery實(shí)時監(jiān)聽用戶輸入狀態(tài),實(shí)現(xiàn)效果是input未輸入值時,按鈕禁用狀態(tài),具體操作代碼大家參考下本文吧2017-09-09
從0到1搭建element后臺框架優(yōu)化篇(打包優(yōu)化)
這篇文章主要介紹了從0到1搭建element后臺框架優(yōu)化篇(打包優(yōu)化),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05
Vue使用.sync 實(shí)現(xiàn)父子組件的雙向綁定數(shù)據(jù)問題
這篇文章主要介紹了Vue使用.sync 實(shí)現(xiàn)父子組件的雙向綁定數(shù)據(jù),需要的朋友可以參考下2019-04-04
使用vue打包時vendor文件過大或者是app.js文件很大的問題
這篇文章主要介紹了使用vue打包時vendor文件過大或者是app.js文件很大問題的解決方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-06-06
Vue 應(yīng)用中結(jié)合vux使用微信 jssdk的方法
今天小編就為大家分享一篇Vue 應(yīng)用中結(jié)合vux使用微信 jssdk的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08

