123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- <template>
- <view class="banner-swiper-box">
- <canvas canvas-id="colorThief" class="hide-canvas"></canvas>
- <swiper class="banner-carousel Shop-selector-rect" circular @change="swiperChange" :autoplay="true">
- <swiper-item v-for="(item, index) in detail" :key="index" class="carousel-item">
- <image class="swiper-image" :src="item.pic" mode="heightFix" lazy-load>
- </image>
- </swiper-item>
- </swiper>
- <view class="banner-swiper-dots">
- <text :class="swiperCurrent === index ? 'banner-dot-active' : 'banner-dot'" v-for="(dot, index) in detail.length"
- :key="index"></text>
- </view>
- </view>
- </template>
- <script>
- import colorThief from 'miniapp-color-thief';
- export default {
- data() {
- return {
- swiperCurrent: 0, //轮播下标
- webviewId: 0,
- };
- },
- props: {
- detail: {
- type: Array,
- default: []
- }
- },
- created: async function() {
- await this.doColorThief();
- },
- computed: {},
- methods: {
- doColorThief() {
- let that = this;
- // 获取轮播图
- let item = this.detail[this.swiperCurrent];
- // 获取轮播图颜色
- let bgcolor = item.color;
- // 颜色不存在
- if (!bgcolor) {
- that.$set(item, 'bgcolor', '#2A2A2A');
- that.$emit('getbgcolor', '#2A2A2A');
- } else {
- that.$set(item, 'bgcolor', bgcolor);
- that.$emit('getbgcolor', bgcolor);
- }
- },
- swiperChange(e) {
- this.swiperCurrent = e.detail.current;
- this.doColorThief();
- let bgcolor = this.detail[this.swiperCurrent].bgcolor;
- },
- // 路由跳转
- goRoll(item) {
- if (item.uniapp_url) {
- this.$yrouter.push(item.uniapp_url)
- }
- },
- }
- }
- </script>
- <style lang="less">
- // 轮播
- .banner-swiper-box {
- background: #fff;
- }
- .banner-swiper-box,
- .banner-carousel {
- width: 750rpx;
- height: 380rpx;
- position: relative;
- .carousel-item {
- width: 100%;
- height: 100%;
- // padding: 0 28upx;
- overflow: hidden;
- }
- .swiper-image {
- width: 100%;
- height: 100%;
- // border-radius: 10upx;
- // background: #ccc;
- }
- }
- .banner-swiper-dots {
- display: flex;
- position: absolute;
- left: 50%;
- transform: translateX(-50%);
- bottom: 20rpx;
- z-index: 5;
- .banner-dot {
- width: 8rpx;
- height: 8rpx;
- border-radius: 50%;
- margin-right: 6rpx;
- background: rgba(255, 255, 255, 1);
- }
- .banner-dot-active {
- width: 30rpx;
- height: 8rpx;
- background: #C3102E;
- border-radius: 4rpx;
- margin-right: 6rpx;
- }
- }
- .hide-canvas {
- position: fixed !important;
- top: -99999upx;
- left: -99999upx;
- z-index: -99999;
- }
- </style>
|