vue中实现滚动条同步滚动

<template>
  <div class="flex">
    <div class="diffCont" ref="leftCont" @scroll="leftScroll"  @mouseover="changeFlag(false)">
      测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据<br />
测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据<br />
    </div>
    <div class="diffCont" ref='rightCont' @scroll="rightScroll" @mouseover="changeFlag(true)">
      测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据<br />
据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据测试数据
    </div>

  </div>
</template>

<script>
export default {
  name: '',
  props: [''],
  data() {
    return {
      flag: false, // 滚动标识,防止改变scrollLeft时重复触发scroll事件
      proportion: 1 // 设置默认比例为1
    }
  },

  components: {},

  computed: {},

  beforeMount() {},

  mounted() {
    // 用内容宽度减去容器宽度
    let lwidth = this.$refs.leftCont.scrollWidth- this.$refs.leftCont.clientWidth,
    rwidth = this.$refs.rightCont.scrollWidth- this.$refs.leftCont.clientWidth;
    // 获得左右两侧宽度的比例值,用于解决两边内容宽度不一致导致一侧滚动条拖到最右侧,另一侧滚动条与最右侧还有一段距离问题。
    this.proportionW = lwidth / rwidth;
  },

  methods: {
    changeFlag(flag) {
      this.flag = flag
    },
    // 左右滚动条滚动同步
    leftScroll(e) {
      if (!this.flag) {
        this.$refs.rightCont.scrollLeft = this.$refs.leftCont.scrollLeft / this.proportionW
      }
    },
    rightScroll (e) {
      if (this.flag) {
         this.$refs.leftCont.scrollLeft = this.$refs.rightCont.scrollLeft * this.proportionW
      }
    },
  },

  watch: {},
}
</script>
<style scoped>
.flex {
  display: flex;
  border: 1px solid #ccc;
}
.diffCont {
  flex: 1;
  height: 200px;
  overflow-y: scroll;
  white-space: nowrap;
}
</style>

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值