当前位置:首页 > 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
分享给朋友:

相关文章

vue 实现

vue 实现

Vue 实现的基本步骤 安装 Vue.js 可以通过 npm 或 CDN 引入。使用 npm 安装适合大型项目,CDN 适合快速原型开发。 npm install vue 在 HTML 文件中引入…

vue实现编辑

vue实现编辑

Vue 实现编辑功能 在 Vue 中实现编辑功能通常涉及表单绑定、状态管理和事件处理。以下是一个常见的实现方法: 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定: <i…

vue 实现长按

vue 实现长按

实现长按功能的基本思路 在Vue中实现长按功能,通常需要监听元素的mousedown或touchstart事件,启动一个计时器。当用户按住元素超过设定的时间阈值时,触发长按回调函数。如果在时间阈值内触…

vue实现表单

vue实现表单

Vue 表单实现方法 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定。适用于 input、textarea、select 等元素。 <template> <…

vue遮罩实现

vue遮罩实现

实现 Vue 遮罩的常见方法 使用 CSS 定位和透明度 创建一个全屏遮罩层,通过 CSS 固定定位覆盖整个视口,并设置半透明背景色。 <template> <div cl…

vue框架实现

vue框架实现

Vue 框架实现方法 Vue 是一个渐进式 JavaScript 框架,适用于构建用户界面。以下是一些核心实现方法,涵盖基本使用、组件化、状态管理和优化技巧。 基本项目搭建 使用 Vue CLI…