123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- <template>
- <view class="banner">
- <swiper class="bg" circular :indicator-dots="false" :autoplay="true" :interval="5000" :duration="200" @change="_bindChange">
- <swiper-item v-for="(item, index) in banners" :key="index">
- <view class="swiper">
- <image :src="item.image" @click.stop="goUrl(item.url)"></image>
- </view>
- </swiper-item>
- </swiper>
- <!-- 指示点 -->
- <view class="indicator-dots round">
- <view class="dots-item" :class="{ active: current == index }" v-for="(dataItem, index) in banners" :key="index"></view>
- </view>
- </view>
- </template>
- <script>
- export default {
- props: {
- banners: {
- type: Array,
- default: []
- }
- },
- data() {
- return {
- current: 1 // 轮播图指针
- }
- },
- methods: {
- goUrl(url) {
- this.$navTo(url);
- },
-
- /**
- * 记录当前指针
- */
- _bindChange(e) {
- this.current = e.detail.current;
- }
- },
- }
- </script>
- <style lang="scss" scoped>
- .banner {
- position: relative;
- width: 100%;
- height: 600rpx;
- .bg {
- width: 100%;
- height: 600rpx;
- }
- }
- .banner,
- .bg,
- .swiper {
- width: 100%;
- height: 600rpx;
- image {
- width: 100%;
- height: 100%;
- }
- }
- /* 指示点 */
- .indicator-dots {
- width: 100%;
- height: 28rpx;
- padding: 10rpx;
- position: absolute;
- left: 0;
- right: 0;
- bottom: 70rpx;
- opacity: 0.8;
- display: flex;
- justify-content: center;
- .dots-item {
- width: 16rpx;
- height: 16rpx;
- margin-right: 8rpx;
- background-color: #333;
- border: solid 5rpx #fff;
- &:last-child {
- margin-right: 0;
- }
- &.active {
- background-color: #fff !important;
- }
- }
- // 圆形
- &.round .dots-item {
- width: 18rpx;
- height: 18rpx;
- border-radius: 18rpx;
- }
- }
- </style>
|