当前位置:首页 > VUE

vue实现横向点击滑动

2026-02-22 19:59:43VUE

Vue 实现横向点击滑动

使用 CSS 和 Vue 事件绑定

通过 CSS 的 overflow-xscroll-behavior 属性实现横向滑动容器,结合 Vue 的 @click 事件触发滚动。

<template>
  <div class="scroll-container" ref="scrollContainer">
    <div class="scroll-content">
      <div v-for="item in items" :key="item.id" class="item">{{ item.text }}</div>
    </div>
    <button @click="scrollLeft">左滑</button>
    <button @click="scrollRight">右滑</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: "Item 1" },
        { id: 2, text: "Item 2" },
        // 更多项目...
      ]
    };
  },
  methods: {
    scrollLeft() {
      this.$refs.scrollContainer.scrollBy({ left: -200, behavior: 'smooth' });
    },
    scrollRight() {
      this.$refs.scrollContainer.scrollBy({ left: 200, behavior: 'smooth' });
    }
  }
};
</script>

<style>
.scroll-container {
  width: 100%;
  overflow-x: auto;
  scroll-behavior: smooth;
  white-space: nowrap;
}
.scroll-content {
  display: inline-flex;
}
.item {
  width: 200px;
  height: 100px;
  margin: 0 10px;
  background: #eee;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
</style>

使用第三方库(如 vue-slick)

vue-slick 是基于 Slick Carousel 的 Vue 封装,适合快速实现轮播或滑动效果。

vue实现横向点击滑动

安装依赖:

npm install vue-slick-carousel

示例代码:

vue实现横向点击滑动

<template>
  <vue-slick ref="slick" :options="slickOptions">
    <div v-for="item in items" :key="item.id">
      {{ item.text }}
    </div>
  </vue-slick>
</template>

<script>
import VueSlick from 'vue-slick-carousel';

export default {
  components: { VueSlick },
  data() {
    return {
      items: [
        { id: 1, text: "Item 1" },
        { id: 2, text: "Item 2" },
      ],
      slickOptions: {
        slidesToShow: 3,
        arrows: true,
        dots: true,
      }
    };
  }
};
</script>

动态计算滑动距离

通过计算容器宽度和项目宽度,动态调整每次滑动的距离。

methods: {
  scrollRight() {
    const container = this.$refs.scrollContainer;
    const itemWidth = 200; // 单个项目宽度
    container.scrollBy({ left: itemWidth, behavior: 'smooth' });
  }
}

响应式滑动

结合 ResizeObserver 监听容器宽度变化,动态调整滑动逻辑。

mounted() {
  const observer = new ResizeObserver(entries => {
    entries.forEach(entry => {
      this.containerWidth = entry.contentRect.width;
    });
  });
  observer.observe(this.$refs.scrollContainer);
}

注意事项

  • 移动端兼容性:确保添加 touch-action CSS 属性以支持触摸滑动。
  • 性能优化:对于大量数据,建议使用虚拟滚动(如 vue-virtual-scroller)。
  • 浏览器支持:scroll-behavior: smooth 在旧版本浏览器中可能需要 polyfill。

标签: 横向vue
分享给朋友:

相关文章

vue实现多选题

vue实现多选题

Vue实现多选题的方法 使用Vue实现多选题功能,可以通过v-model绑定数组、动态渲染选项、以及处理选中状态来实现。以下是一个完整的实现示例: 基础实现代码 <template>…

vue实现点击

vue实现点击

实现点击事件的基本方法 在Vue中实现点击事件可以通过v-on指令或@简写方式绑定。以下是常见的点击事件绑定方法: <template> <button v-on:click=…

vue遮罩实现

vue遮罩实现

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

vue实现数据

vue实现数据

Vue 实现数据绑定的方法 Vue.js 提供了多种方式实现数据绑定,包括双向绑定、单向绑定以及动态数据绑定。以下是几种常见的实现方式: 双向数据绑定(v-model) 双向数据绑定通常用于表单元素…

vue实现rgb调色

vue实现rgb调色

Vue实现RGB调色功能 实现思路 通过Vue的数据绑定和事件处理,动态调整RGB三个通道的值,实时更新显示颜色。 核心代码示例 <template> <div class=…

vue实现拨号功能

vue实现拨号功能

Vue实现拨号功能的方法 使用HTML5的tel协议 在Vue模板中直接使用<a>标签的tel:协议实现拨号功能。这种方法适用于移动端浏览器,点击后会调起系统的拨号界面。 <tem…