You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							110 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							110 lines
						
					
					
						
							2.6 KiB
						
					
					
				
								<template>
							 | 
						|
									<view class="u-swiper-indicator">
							 | 
						|
										<view
							 | 
						|
											class="u-swiper-indicator__wrapper"
							 | 
						|
											v-if="indicatorMode === 'line'"
							 | 
						|
											:class="[`u-swiper-indicator__wrapper--${indicatorMode}`]"
							 | 
						|
											:style="{
							 | 
						|
												width: $u.addUnit(lineWidth * length),
							 | 
						|
												backgroundColor: indicatorInactiveColor
							 | 
						|
											}"
							 | 
						|
										>
							 | 
						|
											<view
							 | 
						|
												class="u-swiper-indicator__wrapper--line__bar"
							 | 
						|
												:style="[lineStyle]"
							 | 
						|
											></view>
							 | 
						|
										</view>
							 | 
						|
										<view
							 | 
						|
											class="u-swiper-indicator__wrapper"
							 | 
						|
											v-if="indicatorMode === 'dot'"
							 | 
						|
										>
							 | 
						|
											<view
							 | 
						|
												class="u-swiper-indicator__wrapper__dot"
							 | 
						|
												v-for="(item, index) in length"
							 | 
						|
												:key="index"
							 | 
						|
												:class="[index === current && 'u-swiper-indicator__wrapper__dot--active']"
							 | 
						|
												:style="[dotStyle(index)]"
							 | 
						|
											>
							 | 
						|
								
							 | 
						|
											</view>
							 | 
						|
										</view>
							 | 
						|
									</view>
							 | 
						|
								</template>
							 | 
						|
								
							 | 
						|
								<script>
							 | 
						|
									import props from './props.js';
							 | 
						|
									/**
							 | 
						|
									 * SwiperIndicator 轮播图指示器
							 | 
						|
									 * @description 该组件一般用于导航轮播,广告展示等场景,可开箱即用,
							 | 
						|
									 * @tutorial https://www.uviewui.com/components/swiper.html
							 | 
						|
									 * @property {String | Number}	length					轮播的长度(默认 0 )
							 | 
						|
									 * @property {String | Number}	current					当前处于活动状态的轮播的索引(默认 0 )
							 | 
						|
									 * @property {String}			indicatorActiveColor	指示器非激活颜色
							 | 
						|
									 * @property {String}			indicatorInactiveColor	指示器的激活颜色
							 | 
						|
									 * @property {String}			indicatorMode			指示器模式(默认 'line' )
							 | 
						|
									 * @example	<u-swiper :list="list4" indicator keyName="url" :autoplay="false"></u-swiper>
							 | 
						|
									 */
							 | 
						|
									export default {
							 | 
						|
										name: 'u-swiper-indicator',
							 | 
						|
										mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
							 | 
						|
										data() {
							 | 
						|
											return {
							 | 
						|
												lineWidth: 22
							 | 
						|
											}
							 | 
						|
										},
							 | 
						|
										computed: {
							 | 
						|
											// 指示器为线型的样式
							 | 
						|
											lineStyle() {
							 | 
						|
												let style = {}
							 | 
						|
												style.width = uni.$u.addUnit(this.lineWidth)
							 | 
						|
												style.transform = `translateX(${ uni.$u.addUnit(this.current * this.lineWidth) })`
							 | 
						|
												style.backgroundColor = this.indicatorActiveColor
							 | 
						|
												return style
							 | 
						|
											},
							 | 
						|
											// 指示器为点型的样式
							 | 
						|
											dotStyle() {
							 | 
						|
												return index => {
							 | 
						|
													let style = {}
							 | 
						|
													style.backgroundColor = index === this.current ? this.indicatorActiveColor : this.indicatorInactiveColor
							 | 
						|
													return style
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
										},
							 | 
						|
									}
							 | 
						|
								</script>
							 | 
						|
								
							 | 
						|
								<style lang="scss" scoped>
							 | 
						|
									@import "../../libs/css/components.scss";
							 | 
						|
								
							 | 
						|
									.u-swiper-indicator {
							 | 
						|
								
							 | 
						|
										&__wrapper {
							 | 
						|
											@include flex;
							 | 
						|
								
							 | 
						|
											&--line {
							 | 
						|
												border-radius: 100px;
							 | 
						|
												height: 4px;
							 | 
						|
								
							 | 
						|
												&__bar {
							 | 
						|
													width: 22px;
							 | 
						|
													height: 4px;
							 | 
						|
													border-radius: 100px;
							 | 
						|
													background-color: #FFFFFF;
							 | 
						|
													transition: transform 0.3s;
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
								
							 | 
						|
											&__dot {
							 | 
						|
												width: 5px;
							 | 
						|
												height: 5px;
							 | 
						|
												border-radius: 100px;
							 | 
						|
												margin: 0 4px;
							 | 
						|
								
							 | 
						|
												&--active {
							 | 
						|
													width: 12px;
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
								
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
								</style>
							 |