当前位置:首页 > VUE

vue实现左右联动

2026-03-30 08:07:52VUE

Vue 实现左右联动效果

左右联动通常指两个独立滚动的容器(如列表)在滚动时保持同步。以下是实现方案:

监听滚动事件

在左右两个容器上绑定 scroll 事件,通过事件处理函数实现同步滚动。需注意避免事件循环触发。

vue实现左右联动

<template>
  <div class="container">
    <div class="left-list" ref="leftList" @scroll="handleLeftScroll">
      <!-- 左侧内容 -->
    </div>
    <div class="right-list" ref="rightList" @scroll="handleRightScroll">
      <!-- 右侧内容 -->
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isScrolling: false
    }
  },
  methods: {
    handleLeftScroll() {
      if (this.isScrolling) return;
      this.isScrolling = true;
      const leftScrollTop = this.$refs.leftList.scrollTop;
      this.$refs.rightList.scrollTop = leftScrollTop;
      setTimeout(() => {
        this.isScrolling = false;
      }, 100);
    },
    handleRightScroll() {
      if (this.isScrolling) return;
      this.isScrolling = true;
      const rightScrollTop = this.$refs.rightList.scrollTop;
      this.$refs.leftList.scrollTop = rightScrollTop;
      setTimeout(() => {
        this.isScrolling = false;
      }, 100);
    }
  }
}
</script>

使用 CSS 同步高度

确保左右容器高度一致,滚动条才会同步:

vue实现左右联动

.container {
  display: flex;
  height: 100vh;
}
.left-list, .right-list {
  height: 100%;
  overflow-y: auto;
  flex: 1;
}

优化性能方案

对于大数据列表,可采用虚拟滚动技术(如 vue-virtual-scroller)减少 DOM 节点:

import { RecycleScroller } from 'vue-virtual-scroller';
export default {
  components: { RecycleScroller }
}

动态内容联动

若内容高度动态变化,需监听内容变化并重新计算:

export default {
  mounted() {
    new ResizeObserver(() => {
      this.$refs.rightList.scrollTop = this.$refs.leftList.scrollTop;
    }).observe(this.$refs.leftList);
  }
}

注意事项

  • 滚动事件频繁触发,需使用防抖或标志位控制
  • 移动端需考虑 touch 事件兼容性
  • 同步精度受容器 padding/margin 影响

标签: vue
分享给朋友:

相关文章

antd vue 实现

antd vue 实现

使用 Ant Design Vue 实现功能 Ant Design Vue 是基于 Vue.js 的 UI 组件库,提供了丰富的组件和设计规范。以下是一些常见功能的实现方法。 安装 Ant Desi…

vue实现尺子

vue实现尺子

Vue 实现尺子组件 实现一个尺子组件可以通过 Canvas 或纯 CSS 完成。以下是两种常见实现方式: 使用 Canvas 绘制尺子 通过 Canvas 动态绘制刻度线和数字,适合需要高精度或动…

vue实现openoffice

vue实现openoffice

Vue 中集成 OpenOffice 的实现方法 在 Vue 项目中集成 OpenOffice 通常需要通过后端服务或现有库实现文档的预览和编辑功能。以下是几种常见的实现方式: 使用 OnlyOff…

vue实现伸缩

vue实现伸缩

Vue实现伸缩功能的方法 使用CSS过渡和Vue的v-if或v-show 通过CSS的transition属性结合Vue的条件渲染指令(v-if或v-show)可以实现元素的伸缩效果。定义一个CSS类…

vue实现gridlayout

vue实现gridlayout

Vue 实现 Grid Layout 使用 CSS Grid 布局 CSS Grid 是一种强大的布局系统,可以直接在 Vue 组件的样式中使用。通过定义网格容器和网格项,可以快速实现复杂的布局结构。…

vue实现分站

vue实现分站

Vue 实现分站的方案 在 Vue 中实现分站功能通常涉及路由配置、环境变量管理和动态加载资源。以下是几种常见的实现方式: 基于路由的分站实现 通过 Vue Router 配置多路由,区分不同站点的…