uni-app 实现类似视差效果的轮播图

发布于 1周前 作者 yuanlaile 来自 Uni-App

uni-app 实现类似视差效果的轮播图

有点像3D效果,可以参考https://wow.techbrood.com/fiddle/27464
就是轮播图上一些文字啊 图片啊 有一定的视差效果

1 回复

uni-app 中实现类似视差效果的轮播图,可以通过结合 swiper 组件和 CSS3 的 transform 属性来实现。以下是一个基本的代码示例,展示如何实现这种效果。

1. 创建页面结构

首先,在你的 uni-app 项目中创建一个页面,例如 parallaxSwiper.vue,并添加基本的 swiper 结构:

<template>
  <view class="container">
    <swiper
      class="swiper"
      indicator-dots="true"
      autoplay="true"
      interval="3000"
      duration="500"
      @change="onSwiperChange"
    >
      <swiper-item v-for="(item, index) in items" :key="index">
        <view class="swiper-item" :style="{ backgroundImage: 'url(' + item.image + ')' }">
          <view class="parallax-layer" :style="parallaxStyle(index)"></view>
        </view>
      </swiper-item>
    </swiper>
  </view>
</template>

2. 添加样式

<style> 标签中添加样式,包括 swiper 和视差层的基本样式:

<style scoped>
.container {
  height: 100vh;
  overflow: hidden;
}

.swiper {
  height: 100%;
}

.swiper-item {
  height: 100%;
  background-size: cover;
  background-position: center;
  position: relative;
}

.parallax-layer {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  will-change: transform;
}
</style>

3. 实现视差效果

<script> 标签中添加数据和方法,以动态计算视差层的 transform 属性:

<script>
export default {
  data() {
    return {
      items: [
        { image: '/static/image1.jpg' },
        { image: '/static/image2.jpg' },
        { image: '/static/image3.jpg' },
      ],
      currentIndex: 0,
    };
  },
  methods: {
    parallaxStyle(index) {
      const offset = this.currentIndex - index;
      const depth = 0.5; // 视差深度,可以调整
      return `transform: translateY(${offset * depth * 100}vpx);`;
    },
    onSwiperChange(event) {
      this.currentIndex = event.detail.current;
    },
  },
};
</script>

总结

这个示例展示了如何在 uni-app 中使用 swiper 组件和 CSS3 的 transform 属性来实现简单的视差效果。你可以根据需要调整视差深度、添加更多层或优化性能。注意,视差效果可能会消耗更多的性能,特别是在移动设备上,因此在实际应用中要考虑性能优化。

回到顶部