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" mode="widthFix" />
- </swiper-item>
- </swiper>
- </view>
- <view class="pagebox" v-if="list.length>0">{{ Number(currentIndex) + 1 }} / {{ list.length }}</view>
- </view>
- </template>
- <script>
- export default {
- name: 'cusPreviewImg',
- 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) {}
- },
- methods: {
- // 左右切换
- changeSwiper(e) {
- this.currentIndex = e.target.current;
- // this.$emit('changeSwitch', e.target.current)
- },
- open(current) {
- if (!this.list.length) return;
- this.currentIndex = current;
- this.showBox = true;
- },
- close() {
- this.showBox = false;
- },
- }
- }
- </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>
|