当前位置:首页 > 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 项目中。

vue实现横向点击滑动

npm install swiper

在 Vue 组件中使用 Swiper:

vue实现横向点击滑动

<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 事件,更新滑动参数。

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增删改查简单实现

vue增删改查简单实现

基础环境搭建 确保已安装Node.js和Vue CLI。通过以下命令创建Vue项目: npm install -g @vue/cli vue create vue-crud-demo cd vue-…

vue 实现简单登陆

vue 实现简单登陆

以下是一个使用 Vue 3 实现的简单登录功能示例,包含表单验证和基础交互逻辑: 创建 Vue 组件 <template> <div class="login-containe…

vue实现轮询

vue实现轮询

实现轮询的基本方法 在Vue中实现轮询可以通过setInterval或setTimeout配合递归调用完成。轮询通常用于定期向服务器请求数据更新。 使用setInterval的简单示例: da…

vue实现ai

vue实现ai

Vue 实现 AI 功能 Vue.js 可以通过集成第三方 AI 服务或本地 AI 模型来实现 AI 功能。以下是几种常见的方法: 集成第三方 AI API 使用 Vue 调用如 OpenAI、G…

代码实现vue

代码实现vue

创建Vue项目 使用Vue CLI快速初始化项目,确保已安装Node.js和npm/yarn: npm install -g @vue/cli vue create my-vue-project…

vue 实现豆瓣

vue 实现豆瓣

以下是基于 Vue 实现豆瓣电影类功能的实现方案,涵盖核心模块和技术要点: 数据获取与 API 调用 使用豆瓣开放 API(需注意调用频率限制)或第三方代理接口 推荐 axios 进行异步请求,配…