添加特效

This commit is contained in:
zpc 2025-04-06 04:30:33 +08:00
parent 475dc60cbd
commit d3ddbd4e9d

View File

@ -1,43 +1,56 @@
<template> <template>
<uni-popup ref="popup" type="center" maskBackgroundColor="rgba(0,0,0,0.9)"> <uni-popup ref="popup" type="center" maskBackgroundColor="rgba(0,0,0,0.9)">
<view v-if="visible" class="preview-popup"> <view v-if="visible" class="preview-popup">
<!-- 赏品列表 --> <!-- 翻转卡片容器 -->
<view class="list" v-if="showList"> <view class="flip-container" :class="{ 'flipped': showList }">
<scroll-view :scroll-y="true"> <view class="flipper">
<view class="res-list"> <!-- 正面商品图片 -->
<view class="res-item" v-for="(item, i) in dataItem.children" :key="i"> <view class="front">
<view class="pic center"> <view class="pic center relative">
<image :src="item.imgurl" lazy-load></image> <image :src="innerImgUrl" lazy-load></image>
<view class="tag center" <view class="type-tag justify-center"
:style="{ backgroundColor: item.shang_info ? item.shang_info.color : '#000000' }">{{ item.shang_info ? :style="{ backgroundColor: dataItem.shang_info ? dataItem.shang_info.color : '#000000' }"
item.shang_info.title : "" }}</view> v-if="innerTipTitle">{{ innerTipTitle }}</view>
<view class="num center">{{ item.surplus_stock }}/{{ item.stock }}</view>
</view>
<view class="title hang1 flex center " style="padding: 0px;margin: 0px;text-align: center;width: 100%;">
<text> {{ item.title }}</text>
</view>
</view> </view>
</view> </view>
</scroll-view>
</view> <!-- 背面赏品列表 -->
<!-- 商品图片 --> <view class="back">
<view class="pic center relative" v-if="!showList"> <view class="list">
<image :src="innerImgUrl" lazy-load></image> <scroll-view :scroll-y="true">
<view class="type-tag justify-center" <view class="res-list">
:style="{ backgroundColor: dataItem.shang_info ? dataItem.shang_info.color : '#000000' }" <view class="res-item" v-for="(item, i) in dataItem.children" :key="i">
v-if="innerTipTitle">{{ innerTipTitle }}</view> <view class="pic center">
<image :src="item.imgurl" lazy-load></image>
<view class="tag center"
:style="{ backgroundColor: item.shang_info ? item.shang_info.color : '#000000' }">{{ item.shang_info ?
item.shang_info.title : "" }}</view>
<view class="num center">{{ item.surplus_stock }}/{{ item.stock }}</view>
</view>
<view class="title hang1 flex center " style="padding: 0px;margin: 0px;text-align: center;width: 100%;">
<text> {{ item.title }}</text>
</view>
</view>
</view>
</scroll-view>
</view>
</view>
</view>
</view> </view>
<!-- 商品标题 --> <!-- 商品标题 -->
<view class="title"> <view class="title">
<text class="hang1">{{ !showList?innerTitle:'抽中宝箱后,会在奖品列表中随机抽取一个奖品' }}</text> <text class="hang1">{{ !showList?innerTitle:'抽中宝箱后,会在奖品列表中随机抽取一个奖品' }}</text>
</view> </view>
<!-- 商品信息列表 --> <!-- 商品信息列表 -->
<view class="info-list"> <view class="info-list">
<view class="info-item" v-if="innerProbability">{{ innerProbability }}</view> <view class="info-item" v-if="innerProbability">{{ innerProbability }}</view>
<view class="info-item" v-if="isTips" @click="showList = !showList">{{ showList ? '收起' : '查看奖品' }}</view> <view class="info-item" v-if="isTips" @click="toggleList">{{ showList ? '收起' : '查看奖品' }}</view>
<view class="info-item" v-if="innerProductType">产品类型: {{ innerProductType }}</view> <view class="info-item" v-if="innerProductType">产品类型: {{ innerProductType }}</view>
<view class="info-item" v-for="(item, index) in innerExtraInfo" :key="index">{{ item }}</view> <view class="info-item" v-for="(item, index) in innerExtraInfo" :key="index">{{ item }}</view>
</view> </view>
<!-- 关闭按钮 --> <!-- 关闭按钮 -->
<view class="close icon" @click="closePopup"> <view class="close icon" @click="closePopup">
<image :src="$img('/static/img/close.png')" lazy-load></image> <image :src="$img('/static/img/close.png')" lazy-load></image>
@ -143,7 +156,11 @@ export default {
this.setPreviewData(options); this.setPreviewData(options);
}, },
//
toggleList() {
this.showList = !this.showList;
},
// //
setPreviewData(data) { setPreviewData(data) {
console.log('设置预览数据', data); console.log('设置预览数据', data);
@ -215,9 +232,47 @@ export default {
width: 80vw; width: 80vw;
box-sizing: border-box; box-sizing: border-box;
height: 850rpx; height: 850rpx;
//
.flip-container {
perspective: 1000px;
width: 100%;
height: 598rpx;
&.flipped .flipper {
transform: rotateY(180deg);
}
.flipper {
transition: 0.8s;
transform-style: preserve-3d;
position: relative;
width: 100%;
height: 100%;
}
.front, .back {
backface-visibility: hidden;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 16rpx;
overflow: hidden;
}
.front {
z-index: 2;
transform: rotateY(0deg);
}
.back {
transform: rotateY(180deg);
}
}
.list { .list {
width: 100%; width: 100%;
height: 598rpx; height: 598rpx;
background-color: #ffffff; background-color: #ffffff;
@ -249,8 +304,6 @@ export default {
border-radius: 16rpx 16rpx 0rpx 0rpx; border-radius: 16rpx 16rpx 0rpx 0rpx;
} }
.num { .num {
position: absolute; position: absolute;
z-index: 2; z-index: 2;
@ -284,7 +337,6 @@ export default {
} }
} }
// //
.pic { .pic {
width: 100%; width: 100%;
@ -350,6 +402,7 @@ export default {
font-family: Source Han Sans CN; font-family: Source Han Sans CN;
font-weight: 400; font-weight: 400;
color: #ffffff; color: #ffffff;
cursor: pointer;
} }
} }
@ -360,7 +413,6 @@ export default {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
// transform: translate(-50%, 160%);
image { image {
width: 48rpx; width: 48rpx;