<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>