Vue 中使用消息总线让两个滚动条同步滚动
Posted lee576
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue 中使用消息总线让两个滚动条同步滚动相关的知识,希望对你有一定的参考价值。
最近自己从零撸起的甘特图组件需要子组件的滚动条同步滚动
这就涉及到子组件之间的互相通信,通过 消息总线 可以达到我们的需求 ,首先建立一个标志位,拖动左边滚动条的时候,右边的滚动条事件不处理,反之拖动右边滚动条时,左边的滚动条事件不做处理,建立一个公共的变量用于两者的互斥
store.js
import Vue from 'vue'
export let store = Vue.observable(
scrollFlag: true
)
export let mutations =
//纵向滚动条同步事件互斥标志位
setScrollFlag(scrollFlag)
store.scrollFlag = scrollFlag
,
建立一个 消息总线的 js 文件
EventBus.js
import Vue from 'vue'
export const EventBus = new Vue()
左边的滚动组件
<template>
<div ref='taskContent' class="content" @scroll="scroll()" @mouseover="mouseover()">
</div>
</template>
<script>
import store from '@/components/gantt/store.js'
import EventBus from '../EventBus.js'
import mutations from '@/components/gantt/store.js'
export default
data()
return
scrollFlag: true
;
,
watch:
scrollFlag: function (newVal)
this.setScrollFlag(newVal)
,
,
mounted()
EventBus.$on('scroll',(scrollTop) =>
this.$refs.taskContent.scrollTop = scrollTop
)
,
methods:
setScrollFlag: mutations.setScrollFlag,
scroll()
if(!this.scrollFlag)
EventBus.$emit('scroll',this.$refs.taskContent.scrollTop)
,
mouseover()
this.scrollFlag = false
右边的滚动条组件
<template>
<div ref='barContent' @scroll="scroll()" @mouseover="mouseover()">
</div>
</template>
import store from '@/components/gantt/store.js'
import EventBus from './EventBus.js'
import mutations from '@/components/gantt/store.js'
export default
data()
return
scrollFlag: true
,
watch:
scrollFlag: function (newVal)
this.setScrollFlag(newVal)
,
,
mounted()
EventBus.$on('scroll',(scrollTop) =>
this.$refs.barContent.scrollTop = scrollTop
)
,
methods:
setScrollFlag: mutations.setScrollFlag,
scroll()
if(this.scrollFlag)
EventBus.$emit('scroll',this.$refs.barContent.scrollTop)
,
mouseover()
this.scrollFlag = true
以上代码比较好理解,所以没有写什么注释,应该很好懂的
以上是关于Vue 中使用消息总线让两个滚动条同步滚动的主要内容,如果未能解决你的问题,请参考以下文章
css Div在页面中纵向固定,不随滚动条滚动,横向随滚动条滚动
[前端][CSS] 纯css实现纵向滚动固定表头与横向内容滚动