小程序立体轮播

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>
相关推荐
镜宇秋霖丶4 小时前
2026.5.6@霖宇博客制作中遇见的问题
前端·javascript·vue.js
喜欢南方姑娘4 小时前
微信小程序热更新-用户打开小程序时检测版本自动更新
微信小程序·小程序·notepad++
一叶星殇4 小时前
高颜值微信小程序 UI 组件库大盘点,助你轻松开发!
微信小程序·小程序
Raytheon_code4 小时前
从零到一:我用微信小程序做了一款串珠DIY定制工具
css·微信小程序·html5·ai编程
晴天sir4 小时前
微信小程序订阅消息推送实战(Java Spring Boot + Redis)
小程序
yzx9910134 小时前
从零开始写一个微信小程序:完整代码实战指南(入门篇)
微信小程序·小程序·notepad++
Можно4 小时前
微信小程序获取用户信息完整流程
微信小程序·小程序
计算机程序定制辅导4 小时前
计算机小程序毕设实战-基于Spring Boot与微信小程序的考研资源共享平台设计与实现基于springboot+微信小程序的考研复习辅助平台【完整源码+LW+部署说明+演示视频,全bao一条龙等】
spring boot·微信小程序·小程序·课程设计
code_li4 小时前
只花了几分钟,用AI开发了一个微信小程序!(附教程)
人工智能·微信小程序·小程序
大厂数码评测员4 小时前
免费菜谱管理小程序怎么做才顺手:从情侣、个人、家庭三类场景拆需求和实现
服务器·小程序·apache