| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 | 
							- <template>
 
- 	<view class="gui-swiper-card-wrap">
 
- 		<swiper 
 
- 		:style="{
 
- 			width:width+'rpx', 
 
- 			height:heightIn+'rpx'
 
- 		}" 
 
- 		class="gui-swiper-card" 
 
- 		:indicator-dots="false" 
 
- 		:interval="interval" 
 
- 		:circular="true" 
 
- 		:autoplay="autoplay" 
 
- 		:current="currentIndex" 
 
- 		:previous-margin="spacing+'rpx'" 
 
- 		:next-margin="spacing+'rpx'" 
 
- 		@change="swiperchange">
 
- 			<swiper-item 
 
- 			v-for="(item, index) in swiperItems" 
 
- 			:key="index" 
 
- 			class="gui-swiper-card-item gui-border-box">
 
- 				<navigator 
 
- 				class="gui-swiper-card-nav gui-transition-all" 
 
- 				:url="item.url" 
 
- 				:open-type="item.opentype" 
 
- 				hover-class="none" 
 
- 				v-if="item.opentype != 'click'" 
 
- 				:style="{
 
- 					paddingLeft:current != index ? padding +'rpx':'0rpx',
 
- 					paddingRight:current != index ? padding +'rpx':'0rpx',
 
- 					paddingTop:current != index ? paddingY +'rpx':'0rpx',
 
- 					paddingBottom:current != index ? paddingY +'rpx':'0rpx'
 
- 				}">
 
- 					<image 
 
- 					:style="{
 
- 						borderRadius : borderRadius, 
 
- 						width:current != index ? widthInSamll+'rpx':widthIn+'rpx',
 
- 						height:current != index ? heightInSmall+'rpx':heightIn+'rpx',
 
- 						opacity:current != index ? opacity : 1
 
- 					}" 
 
- 					:src="item.img" 
 
- 					:mode="imgMode" 
 
- 					class="gui-swiper-card-image gui-transition-all" />
 
- 				</navigator>
 
- 				<view 
 
- 				class="gui-swiper-card-nav gui-transition-all" 
 
- 				hover-class="none" 
 
- 				v-if="item.opentype == 'click'" 
 
- 				@tap.stop="taped" 
 
- 				:data-index="index" 
 
- 				:style="{
 
- 					paddingLeft:current != index ? padding +'rpx':'0rpx',
 
- 					paddingRight:current != index ? padding +'rpx':'0rpx',
 
- 					paddingTop:current != index ? paddingY +'rpx':'0rpx',
 
- 					paddingBottom:current != index ? paddingY +'rpx':'0rpx'
 
- 				}">
 
- 					<image 
 
- 					:style="{
 
- 						borderRadius : borderRadius, 
 
- 						width:current != index ? widthInSamll+'rpx':widthIn+'rpx',
 
- 						height:current != index ? heightInSmall+'rpx':heightIn+'rpx',
 
- 						opacity:current != index ? opacity : 1
 
- 					}" 
 
- 					:src="item.img" 
 
- 					:mode="imgMode" 
 
- 					class="gui-swiper-card-image gui-transition-all" />
 
- 				</view>
 
- 				<view 
 
- 				v-if="indicatorType == 'number'" 
 
- 				class="gui-indicator-dot-numbers gui-flex gui-row gui-nowrap" 
 
- 				:class="indicatorBarBgClass" 
 
- 				:style="{
 
- 					height:indicatorBarHeight+'rpx', 
 
- 					'border-bottom-left-radius':borderRadius, 
 
- 					'border-bottom-right-radius':borderRadius,
 
- 					width:current != index ? widthInSamll+'rpx':widthIn+'rpx', 
 
- 					left:current != index ? padding+'rpx':'0rpx', 
 
- 					bottom:current != index ? paddingY+'rpx':'0rpx'
 
- 				}">
 
- 					<text 
 
- 					class="gui-indicator-dot-text" 
 
- 					:style="{
 
- 						paddingLeft:'20rpx', 
 
- 						'fontStyle':'italic', 
 
- 						color:titleColor
 
- 					}">{{index+1}}</text>
 
- 					<text 
 
- 					class="gui-indicator-dot-text" 
 
- 					:style="{
 
- 						'fontSize':'36rpx', 
 
- 						color:titleColor
 
- 					}">/</text>
 
- 					<text 
 
- 					class="gui-indicator-dot-text" 
 
- 					:style="{
 
- 						fontSize:'28rpx', 
 
- 						paddingRight:'20rpx', 
 
- 						fontStyle:'italic', 
 
- 						color:titleColor
 
- 					}">{{swiperItems.length}}</text>
 
- 					<text 
 
- 					class="gui-swiper-text gui-block-text gui-flex1 gui-ellipsis" 
 
- 					:style="{
 
- 						color:titleColor, 
 
- 						fontSize:titleSize, 
 
- 						height:indicatorBarHeight+'rpx', 
 
- 						lineHeight:indicatorBarHeight+'rpx'
 
- 					}">{{item.title}}</text>
 
- 				</view>
 
- 			</swiper-item>
 
- 		</swiper>
 
- 		<!--  进度圆点  -->
 
- 		<view 
 
- 		class="gui-indicator-dots gui-flex gui-row gui-nowrap gui-justify-content-center gui-align-items-center gui-border-box" 
 
- 		v-if="indicatorType == 'dot'" 
 
- 		:style="{
 
- 			width:width+'rpx', 
 
- 			height:indicatorBarHeight+'rpx', 
 
- 			position:indicatorPosition, 
 
- 			paddingLeft:spacing+'rpx', 
 
- 			paddingRight:spacing+'rpx', 
 
- 			'justify-content':indicatorDirection
 
- 		}">
 
- 			<view 
 
- 			class="gui-indicator-dots-wrap gui-flex gui-row gui-nowrap gui-justify-content-center">
 
- 				<view 
 
- 				v-for="(item, index) in swiperItems" 
 
- 				:key="index" 
 
- 				:class="[
 
- 					'gui-indicator-dot', 
 
- 					current == index ? 'dot-show' : '', 
 
- 					current == index ? indicatorActiveClass : indicatorClass
 
- 				]" 
 
- 				:style="{
 
- 					width           : current != index ? indicatorWidth+'rpx' : indicatorActiveWidth +'rpx',
 
- 					height          : indicatorHeight+'rpx',
 
- 					borderRadius    : indicatorRadius+'rpx',
 
- 				}"></view>
 
- 			</view>
 
- 		</view>
 
- 	</view>
 
- </template>
 
- <script>
 
- export default{
 
- 	name  : "gui-swiper",
 
- 	props : {
 
- 		width :{ type : Number, default : 750 },
 
- 		height:{ type : Number, default : 300 },
 
- 		swiperItems : { 
 
- 			type : Array, 
 
- 			default : function(){
 
- 				return new Array();
 
- 			}
 
- 		},
 
- 		borderRadius : { type : String, default : '10rpx'},
 
- 		indicatorBarHeight:{type : Number, default : 68},
 
- 		indicatorBarBgClass:{
 
- 			type : Array, 
 
- 			default : function(){
 
- 				return ['gui-bg-black-opacity5'];
 
- 			}
 
- 		},
 
- 		indicatorWidth : { type:Number, default:18 },
 
- 		indicatorActiveWidth :{ type:Number, default:18 },
 
- 		indicatorHeight : { type:Number, default:18 },
 
- 		indicatorRadius:{ type:Number, default:18 },
 
- 		indicatorClass : {
 
- 			type : Array, 
 
- 			default : function(){
 
- 				return ['gui-bg-gray','gui-dark-bg-level-5'];
 
- 			}
 
- 		},
 
- 		indicatorActiveClass : {
 
- 			type : Array, 
 
- 			default : function(){
 
- 				return ['gui-bg-primary'];
 
- 			}
 
- 		},
 
- 		indicatorType:{ type : String, default : "dot" },
 
- 		indicatorPosition:{ type : String, default : "absolute" },
 
- 		indicatorDirection:{type:String, default:'center'},
 
- 		// #ifndef APP-NVUE
 
- 		spacing : { type : Number, default : 50 },
 
- 		// #endif
 
- 		// #ifdef APP-NVUE
 
- 		spacing : { type : Number, default : 0 },
 
- 		// #endif
 
- 		// #ifdef APP-NVUE
 
- 		padding : { type : Number, default : 0 },
 
- 		// #endif
 
- 		// #ifndef APP-NVUE
 
- 		padding : { type : Number, default : 26 },
 
- 		// #endif
 
- 		interval : { type : Number, default : 5000 },
 
- 		autoplay : { type : Boolean, default : true },
 
- 		currentIndex : { type : Number, default : 0 },
 
- 		opacity:{ type : Number, default:0.66},
 
- 		titleColor:{type:String, default:"#FFFFFF"},
 
- 		titleSize:{type:String, default:"28rpx"},
 
- 		imgMode:{type:String, default:'aspectFill'}
 
- 	},
 
- 	data() {
 
- 		return {
 
- 			current : 0,
 
- 			isReady : false,
 
- 			widthIn : 750,
 
- 			heightIn  : 300,
 
- 			widthInSamll:700,
 
- 			heightInSmall:280,
 
- 			paddingY:0
 
- 		}
 
- 	},
 
- 	watch:{
 
- 		currentIndex : function (val) {
 
- 			this.current = val;
 
- 		}
 
- 	},
 
- 	created:function(){
 
- 		this.current = this.currentIndex;
 
- 		this.init();
 
- 	},
 
- 	methods:{
 
- 		init : function(){
 
- 			// 图片宽高计算
 
- 			this.widthIn   = this.width - this.spacing*2;
 
- 			this.heightIn  = this.height / this.width * this.widthIn;
 
- 			this.paddingY  = this.padding * this.height / this.width;
 
- 			this.widthInSamll  = this.widthIn -  this.padding * 2;
 
- 			this.heightInSmall = this.heightIn - this.paddingY * 2;
 
- 		},
 
- 		swiperchange : function (e) {
 
- 			var current = e.detail.current;
 
- 			this.current = current;
 
- 			this.$emit('swiperchange', current);
 
- 		},
 
- 		taped : function(e){
 
- 			this.$emit('taped', e.currentTarget.dataset.index);
 
- 		}
 
- 	},
 
- 	emits : ['swiperchange', 'taped']
 
- }
 
- </script>
 
- <style scoped>
 
- .gui-swiper-card-wrap{position:relative;}
 
- .gui-swiper-card{overflow:hidden;}
 
- .gui-swiper-card-item{font-size:0; overflow:hidden; line-height:0;}
 
- .gui-swiper-card-nav{font-size:0; position:relative;}
 
- .gui-indicator-dots{width:750rpx; overflow:hidden; z-index:1; left:0; bottom:0;}
 
- .gui-indicator-dot{margin:6rpx;}
 
- .gui-indicator-dots-wrap{padding:0 20rpx;}
 
- .gui-indicator-dot-text{text-align:center; line-height:68rpx; padding:0 4rpx; color:#FFFFFF; font-size:32rpx;}
 
- .gui-indicator-dot-numbers{overflow:hidden; align-items:center; position:absolute; z-index:1; left:0; bottom:0;}
 
- .gui-swiper-text{width:200rpx; line-height:68rpx; padding-right:25rpx; overflow:hidden;}
 
- /* #ifndef APP-NVUE */
 
- @keyframes dot-show{from{opacity:0.1;}to{opacity:1;}}
 
- .dot-show{animation:dot-show 300ms linear forwards;}
 
- /* #endif */
 
- </style>
 
 
  |