小程序立体轮播

javascript 复制代码
<template>
  <view class="container">
    <swiper class="swiper"
            :circular="true"
            :autoplay="true"
            :interval="3000"
            :duration="500"
            :previous-margin="'160rpx'"
            :next-margin="'160rpx'"
            @change="swiperChange"
            @transition="swiperTransition"
            @animationfinish="swiperAnimationfinish">
      <swiper-item v-for="(item, index) in imageList" :key="index">
        <view class="card-wrapper">
          <view class="card-container" :class="{'active': current === index, 'prev': isPrev(index), 'next': isNext(index)}">
            <image :src="item.url" mode="aspectFill" class="card-image" lazy-load :style="{ transform: `translateZ(0)` }"/>
            <!-- <view class="text-overlay" v-if="current === index">
              <text class="quote-text">"感谢领导"</text>
            </view> -->
          </view>
        </view>
      </swiper-item>
    </swiper>
  </view>
</template>

<style>
.container {
  padding: 20rpx 0;
}

.swiper {
  height: 280rpx;
}

.card-wrapper {
  perspective: 800rpx;
  height: 100%;
}

.card-container {
  height: 200rpx;
  margin: 20rpx 0rpx;
  position: relative;
  transition: transform 0.3s ease;
  /* border-radius: 20rpx; */
  overflow: hidden;
  transform-style: preserve-3d;
  transform: scale(0.9) rotateY(0deg);
  opacity: 0.6;
  will-change: transform;
  -webkit-backface-visibility: hidden;
  -webkit-transform-style: preserve-3d;
}

.active {
  transform: scale(1) rotateY(0deg) translateZ(50rpx);
  opacity: 1;
  box-shadow: 0 8rpx 20rpx rgba(0, 0, 0, 0.15);
}

.prev {
  transform: scale(0.9) rotateY(25deg) translateX(30rpx);
}

.next {
  transform: scale(0.9) rotateY(-25deg) translateX(-30rpx);
}

.card-image {
  width: 100%;
  height: 100%;
  /* border-radius: 20rpx; */
}

.text-overlay {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: linear-gradient(to right, rgba(255, 228, 196, 0.8), rgba(255, 218, 185, 0.8));
  display: flex;
  align-items: center;
  justify-content: center;
  backface-visibility: hidden;
}

.quote-text {
  color: #333;
  font-size: 32rpx;
  font-weight: 500;
}
</style>

<script>
export default {
  data() {
    return {
      current: 0,
      isAnimating: false,
      imageList: [
        { url: 'https://img2.baidu.com/it/u=322190086,731051889&fm=253&fmt=auto&app=120&f=JPEG?w=889&h=500' },
        { url: 'https://img2.baidu.com/it/u=322190086,731051889&fm=253&fmt=auto&app=120&f=JPEG?w=889&h=500' },
        { url: 'https://img2.baidu.com/it/u=322190086,731051889&fm=253&fmt=auto&app=120&f=JPEG?w=889&h=500' },
        { url: 'https://img2.baidu.com/it/u=322190086,731051889&fm=253&fmt=auto&app=120&f=JPEG?w=889&h=500' },
      ]
    }
  },
  methods: {
    swiperChange(e) {
      this.current = e.detail.current;
    },
    isPrev(index) {
      if (this.current === 0 && index === this.imageList.length - 1) return true;
      return index === this.current - 1;
    },
    isNext(index) {
      if (this.current === this.imageList.length - 1 && index === 0) return true;
      return index === this.current + 1;
    },
    swiperTransition() {
      this.isAnimating = true;
    },
    swiperAnimationfinish() {
      this.isAnimating = false;
    }
  }
}
</script>
相关推荐
getapi33 分钟前
在宝塔面板中部署 Vue 项目打包后的 dist 文件作为前端
前端·javascript·vue.js
59678515442 分钟前
css浮动
前端·css·html
我想发发发1 小时前
已经安装了ROS环境却还是报错`ModuleNotFoundError: No module named ‘rclpy‘`
前端·人工智能·chrome·机器人
—Qeyser1 小时前
Flutter 组件通信完全指南
前端·javascript·flutter
天天进步20151 小时前
从脚本到服务:5 分钟通过 Botasaurus 将你的爬虫逻辑转化为 Web API
前端·爬虫
沛沛老爹2 小时前
Web转AI架构篇:Agent Skills vs MCP-混合架构设计模式实战指南
java·前端·人工智能·架构·llm·rag
张张努力变强2 小时前
C++类和对象(一):inline函数、nullptr、类的定义深度解析
开发语言·前端·jvm·数据结构·c++·算法
Elcker2 小时前
JAVA-Web 项目研发中如何保持团队研发风格的统一
java·前端·javascript
selectDele3 小时前
Solid.js和React的比较
前端·javascript·react.js·solid.js
小旋风012343 小时前
前端对接豆包AI(vue2版本)
前端·人工智能