当前位置:首页 > VUE

vue实现横向点击滑动

2026-01-22 04:57:58VUE

Vue 实现横向点击滑动

使用 CSS 和 Vue 事件绑定

通过 Vue 的 @click 事件绑定和 CSS 的 transform 属性实现横向滑动效果。
定义滑动距离变量,点击按钮时修改该变量,通过计算属性动态绑定样式。

<template>
  <div class="slider-container">
    <button @click="slide(-100)">向左滑动</button>
    <div class="slider" :style="{ transform: `translateX(${offset}px)` }">
      <div v-for="(item, index) in items" :key="index" class="slide-item">
        {{ item }}
      </div>
    </div>
    <button @click="slide(100)">向右滑动</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      offset: 0,
      items: ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5']
    };
  },
  methods: {
    slide(distance) {
      this.offset += distance;
    }
  }
};
</script>

<style>
.slider-container {
  overflow: hidden;
  position: relative;
}
.slider {
  display: flex;
  transition: transform 0.3s ease;
}
.slide-item {
  flex: 0 0 100px;
  height: 100px;
  margin: 0 10px;
  background: #eee;
  display: flex;
  align-items: center;
  justify-content: center;
}
</style>

使用第三方库(如 Swiper)

对于更复杂的滑动需求,可以使用 Swiper 库,它提供了丰富的滑动效果和 API。
安装 Swiper 并集成到 Vue 项目中。

npm install swiper

在 Vue 组件中使用 Swiper:

<template>
  <swiper :options="swiperOptions">
    <swiper-slide v-for="(item, index) in items" :key="index">
      {{ item }}
    </swiper-slide>
  </swiper>
</template>

<script>
import { Swiper, SwiperSlide } from 'swiper/vue';
import 'swiper/swiper-bundle.css';

export default {
  components: {
    Swiper,
    SwiperSlide
  },
  data() {
    return {
      items: ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5'],
      swiperOptions: {
        slidesPerView: 3,
        spaceBetween: 30,
        navigation: {
          nextEl: '.swiper-button-next',
          prevEl: '.swiper-button-prev'
        }
      }
    };
  }
};
</script>

动态计算滑动距离

根据容器宽度和子元素数量动态计算滑动距离,确保每次滑动一个完整元素。
使用 clientWidth 获取元素宽度,动态调整 offset 值。

<template>
  <div class="slider-container" ref="container">
    <button @click="slide('left')">向左滑动</button>
    <div class="slider" :style="{ transform: `translateX(${offset}px)` }" ref="slider">
      <div v-for="(item, index) in items" :key="index" class="slide-item" ref="items">
        {{ item }}
      </div>
    </div>
    <button @click="slide('right')">向右滑动</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      offset: 0,
      items: ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5'],
      itemWidth: 0
    };
  },
  mounted() {
    this.itemWidth = this.$refs.items[0].clientWidth + 20; // 包括 margin
  },
  methods: {
    slide(direction) {
      const containerWidth = this.$refs.container.clientWidth;
      const maxOffset = -(this.items.length * this.itemWidth - containerWidth);

      if (direction === 'left' && this.offset < 0) {
        this.offset += this.itemWidth;
      } else if (direction === 'right' && this.offset > maxOffset) {
        this.offset -= this.itemWidth;
      }
    }
  }
};
</script>

响应式滑动

结合 Vue 的响应式特性,监听窗口大小变化,动态调整滑动逻辑。
使用 window.addEventListener 监听 resize 事件,更新滑动参数。

vue实现横向点击滑动

mounted() {
  window.addEventListener('resize', this.handleResize);
  this.handleResize();
},
beforeDestroy() {
  window.removeEventListener('resize', this.handleResize);
},
methods: {
  handleResize() {
    this.itemWidth = this.$refs.items[0].clientWidth + 20;
  }
}

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

相关文章

vue实现div

vue实现div

Vue 实现 DIV 元素的方法 在 Vue 中实现 DIV 元素可以通过多种方式,以下是几种常见的实现方法: 使用模板语法 在 Vue 的模板中直接使用 HTML 的 <div> 标签…

实现.vue文件

实现.vue文件

创建.vue文件的基本结构 一个标准的.vue文件包含三个部分:模板(template)、脚本(script)和样式(style)。这种结构允许开发者在一个文件中管理组件的HTML、JavaScrip…

vue实现radio

vue实现radio

Vue 实现 Radio 按钮 在 Vue 中实现 Radio 按钮可以通过 v-model 进行数据绑定,结合 input 元素的 type="radio" 属性。以下是一个基本示例: <t…

vue实现画廊

vue实现画廊

Vue实现画廊的基本方法 使用Vue.js实现画廊功能可以通过多种方式完成,以下是一种常见的实现方案: 安装必要依赖 npm install vue-gallery --save 引入组件并注册…

vue实现座位

vue实现座位

Vue实现座位布局 使用Vue实现座位布局可以通过组件化和响应式数据管理来简化开发流程。以下是一个完整的实现方案: 数据准备 定义座位数据结构,通常使用二维数组表示行列关系: data() {…

vue打包实现推送

vue打包实现推送

Vue 项目打包与自动化部署推送 打包 Vue 项目 使用以下命令生成生产环境代码,默认输出到 dist 目录: npm run build 配置自动化推送(以 GitHub Pages 为例)…