123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- <template>
- <!-- 属性规格放大图轮播 -->
- <view class="previewImg" v-if="showBox" @touchmove.stop.prevent>
- <view class="mask" @click="close">
- <swiper @change="changeSwiper" class="mask-swiper" :current="currentIndex" :circular="circular" :duration="duration">
- <swiper-item v-for="(src, i) in list" :key="i" class="flex flex-column justify-center align-center">
- <image class="mask-swiper-img" :src="src.image" mode="widthFix" />
- <view class="mask_sku">
- <text class="sku_name">{{src.suk}}</text>
- <text class="sku_price">¥{{src.price}}</text>
- <!-- #ifdef H5 || APP-PLUS -->
- <slot name="info" :item="src"></slot>
- <!-- #endif -->
- <!-- #ifdef MP -->
- <slot name="info{{i}}"></slot>
- <!-- #endif -->
- </view>
- </swiper-item>
- </swiper>
- </view>
- <view class="pagebox" v-if="list.length>0">{{ Number(currentIndex) + 1 }} / {{ list.length }}</view>
- <!-- #ifndef MP -->
- <!-- <text class="iconfont icon-fenxiang share_btn" @click="shareFriend()"></text> -->
- <!-- #endif -->
- </view>
- </template>
- <script>
- export default {
- name: 'cus-previewImg',
- props: {
- list: {
- type: Array,
- required: true,
- default: () => {
- return [];
- }
- },
- circular: {
- type: Boolean,
- default: true
- },
- duration: {
- type: Number,
- default: 500
- }
- },
- data() {
- return {
- currentIndex: 0,
- showBox: false
- };
- },
- watch: {
- list(val) {
- // console.log('图片预览', val)
- }
- },
- methods: {
- // 左右切换
- changeSwiper(e) {
- this.currentIndex = e.target.current;
- this.$emit('changeSwitch',e.target.current)
- },
- open(current) {
- if (!current || !this.list.length) return;
- this.currentIndex = this.list.map((item)=>item.suk).indexOf(current);
- this.showBox = true;
- },
- close() {
- this.showBox = false;
- }
- // shareFriend(){
- // this.$emit('shareFriend')
- // }
- }
- }
- </script>
- <style lang="scss" scoped>
- @mixin full {
- width: 100%;
- height: 100%;
- }
- .previewImg {
- position: fixed;
- top: 0;
- left: 0;
- z-index: 300;
- @include full;
- .mask {
- display: flex;
- justify-content: center;
- align-items: center;
- background-color: #000;
- opacity: 1;
- z-index: 8;
- @include full;
- &-swiper {
- @include full;
- &-img {
- width: 100%;
- }
- }
- }
- .pagebox{
- position: absolute;
- width: 100%;
- bottom: 20rpx;
- z-index: 300;
- color: #fff;
- text-align: center;
- }
- }
- .mask_sku{
- color: #fff;
- max-width: 80%;
- z-index: 300;
- text-align: center;
- display: flex;
- flex-direction: column;
- align-items: center;
- margin-top: 30rpx;
- .sku_name{
- font-size: 12px;
- border: 1px solid #fff;
- padding: 10rpx 30rpx 10rpx;
- border-radius: 40px;
- box-sizing: border-box;
- }
- .sku_price{
- padding-top: 10px;
- }
- }
- .font12{
- font-size: 24rpx;
- }
- .share_btn{
- position: absolute;
- top:70rpx;
- right:50rpx;
- font-size: 40rpx;
- color:#fff;
- z-index: 300;
- }
- .flex-column{flex-direction: column;}
- .justify-center {justify-content: center;}
- .align-center {align-items: center;}
- </style>
|