<!-- 电影画廊组件 -->

<template>
	<view class="ynGalleryPanel">
		<view class="gallerypanel" style="filter:brightness(1);border-radius:1upx"
			:style="{'background':bkstyle,'height':galleryheight+'px','width':'100%'}">
			<scroll-view class="scroll-view" scroll-x="true" scroll-with-animation="true" :scroll-into-view="toview"
				:scroll-left="scrollLeft" @scroll="scroll">
				<!-- scroll-view-panle 容纳左右空块+中间img块 -->
				<view class="scroll-view-panle" @touchend='touchEndHandle' @touchstart='touchStartHandle'
					@touchmove='touchMoveHandle'>
					<!-- 左侧留空 必须用min-width属性 用width属性无效-->
					<view class="leftview" :style="{'min-width':sviewlst.leftview.w+'px','height':galleryheight+'px'}">
					</view>
					<!-- 中间图像横向列表 ==-->
					<!-- 外层 高度与画廊高度一样 -->
					<view :id="'imgviewpanel'+index" :ref="'imgviewpanel'+index"
						:class="[activeviewindex == index? 'trans-fadeout':  '']" @animationstart="animationstartHandle"
						@animationend="animationendHandle" v-for="(item,index) in sviewlst.imgsview" :key="index"
						:style="{'width':item.w+'px','height':galleryheight+'px'}"
						style="border: #BB6622 0px solid;display:flex;flex-direction: column;align-content:center;justify-content: flex-end;">
						<!-- 内层 高度是图片容器的高度 -->
						<!-- 顶部圆角角标 -->
						<view v-if="showbadge && badegtype=='round'" class="roundbadge"
							:style="{background:[(index % 2) ==0? 'red':'green']}">
							<text> {{item.badeg}}</text>
						</view>
						<!-- 三角标记组件 -->
						<!-- <ynTriangleBadge v-if="showbadge && badegtype=='trian'" :width="badegwidth"
							:height="badegheight" :text="item.badeg" :bgcolor="item.badegcolor"
							style="z-index:2;align-self: flex-end;margin-right: 5px;border: #EC6D2C 0upx solid;"
							:style="{'margin-bottom':(parseInt(badegheight)+5)*-1+'px'}">
						</ynTriangleBadge> -->
						<!-- 图片框 居中属性-->
						<view style="display:flex; align-content:flex-end;justify-content: center; border:red 0px solid;"
						      :style="{'width':item.w+'px','height': item.h+'px'}">
							  <image :ref="'image'+index" 
									style="align-self: center;border-radius: 1px; " 
									:style="{'width' :item.w-10 +'px',
									'height':item.h-10 +'px',
									'border':[activeviewindex == index? '#EC6D2C 1px solid':'#EC6D2C 0px solid']}"
									:src="item.posterUrl" 
									@click="clickimg(index,item)" mode="scaleToFill">
							  </image>
						</view>
						<!-- 描述视图 -->
						<view
							style="display: flex;justify-content: center;margin-bottom: 4px;border:  #008000 0px solid;min-height: 10px;">
							<!-- <text v-if="showdec" style="align-self: center;font-size: 12px;color:white">{{item.dec}}</text> -->
						</view>
					</view>
					<!-- 右侧留空  必须用min-width属性 用width属性无效-->
					<view class="rightview"
						:style="{'min-width':sviewlst.rightview.w+'px','height':galleryheight+'px'}"></view>
				</view>
			</scroll-view>

		</view>
	</view>
</template>

<script>
	import ynTriangleBadge from './film-badge.vue';
	export default {
		components: {
			ynTriangleBadge,
		},
		name: 'FilmSwiper',
		props: {
			//背景起始色
			bkstart: {
				type: [String],
				default: '#000000'
			},
			// 背景结束色
			bkend: {
				type: [String],
				default: '#000000'
			},
			// 画廊高度 单位px
			galleryheight: {
				type: [Number, String],
				default: 180 * 1.0
			},
			//图像源对象列表
			images: {
				type: Array,
			},
			//图像容器宽度
			imgviewwidth: {
				type: [Number],
				default: parseInt(170 * 0.5)
			},
			//图像容器高度
			imgviewheight: {
				type: [Number],
				default: parseInt(235 * 0.45)
			},
			showbadge: {
				type: [Boolean],
				default: false
			},
			showdec: {
				type: [Boolean],
				default: false
			},
			badegtype: {
				type: [String],
				default: 'trian' //round trian
			},
			badegwidth: {
				type: [String],
				default: "25"
			},
			badegheight: {
				type: [String],
				default: "25"
			}

		},

		data() {
			return {
				//bkstart bkend不能在组件内赋值 该元素做中转
				bkstartcolor: this.bkstart,
				bkendcolor: this.bkend,

				badegcolor: "red",
				// 定时器 用来判断滑动是否结束
				TTT: null,
				// 这个变量用来判断是否进行了滑动操作 
				istouchmove: false,
				// 手指是否离开了屏幕
				isEndTouch: true,
				// 屏幕中心点
				screencenterpos: 0,
				//当前焦点view块index序
				activeviewindex: 0,
				//焦点图中间点与屏幕中间点的偏移，通常不滑动的时候，焦点图总是显示在中间，且图的中间点总是与屏幕中间重合
				offset: 0,
				//这个用来定位具体的位置
				scrollLeft: 0,
				//当前距离左边的距离
				newleft: 0,
				//上一次距离左边的距离
				oldleft: {
					scrollleft: 0
				},
				//滚动组件内视图块数据定义
				sviewlst: {
					leftview: {}, //左则空块
					rightview: {}, //右侧空块
					imgsview: [] //中间image图像数组块
				},
				toview: "viewitem0",
			};
		},
		created: function() {
			if (this.images.length > 0) {
				this.screencenterpos = parseInt(uni.upx2px(750) / 2);
				this.upDataScrollviewLayout(this.activeviewindex);
			}
		},
		mounted: function() {},
		watch: {
			async images() {
				var that = this;
				console.log('watch监控到images属性变化');
				this.screencenterpos = parseInt(uni.upx2px(750) / 2);
				console.log("屏幕中点pos位置:" + this.screencenterpos + 'px');
				this.upDataScrollviewLayout(this.activeviewindex);
			},
			activeviewindex() {
				this.$emit('scrollerItem', this.images[this.activeviewindex])
			}
		},
		computed: {
			// 返回径向渐变样式值 用来设置背景  如果定义了每个image的主色（domiant）则会设置该主色作为径向渐变的起始色 
			bkstyle() {
				// return `radial-gradient(circle,${this.bkstartcolor}, ${this.bkendcolor})`
			},
		},
		methods: {
			SetBkRightAnimate: function(startcolor) {
				var that = this;
				var nums = 10;
				//取2个颜色之间的过渡色 
				var colorarr = this.gradientColor(startcolor, this.bkendcolor, nums);
				// console.log(colorarr)
				let num = 10;
				//渐显  
				var i = setInterval(function() {
					that.bkstartcolor = colorarr[num - 1]
					num--;
					//0=最亮  所以这里也可以控制明暗
					if (num < (10 / 2))
						clearInterval(i);
				}, 50);
			},
			endscroll: function(e) {
				// console.log('endscorll')
			},
			//实时监控scrol位置  计算焦点图中点偏移
			scroll: function(e) {
				// console.log('检测到scroll 被触发......')
				var that = this;
				// console.log(e)		
				this.newleft = e.mp.detail.scrollLeft;
				this.oldleft.scrollleft = this.newleft;
				//scroll左边点+屏幕中点 总是随着拖动而变化
				let cenpos = e.mp.detail.scrollLeft + this.screencenterpos;
				// console.log('中锚点位置:'+cenpos); 
				for (let i in this.sviewlst.imgsview) {
					let item = this.sviewlst.imgsview[i];
					if ((item.l <= cenpos) && (item.r >= cenpos)) {
						let imgcpos = item.l + parseInt(item.w / 2);
						let aoffset = cenpos - imgcpos;
						this.offset = aoffset;
						this.upDataScrollviewLayout(i);
						break;
					}
				}
			},

			//$emit 向上传递 所有父或者父父组件会依次接收到emit事件
			clickimg(idx, imgviewobj) {
				this.activeviewindex = idx
				this.scrollLeft = this.sviewlst.imgsview[idx].l - parseInt(this.screencenterpos) + parseInt(this.sviewlst
					.imgsview[idx].w / 2);
				this.$emit('clickimg', imgviewobj)
			},

			touchStartHandle(e) {
				// 手指按到屏幕
				this.istouchmove = false;
				this.isEndTouch = false;
			},
			touchMoveHandle(e) {
				// 手指滑动中
				this.istouchmove = true;
			},
			touchEndHandle(e) {
				// 手指离开屏幕
				this.isEndTouch = true;
			},
			animationstartHandle() {
				// 元素css动画开始事件
				// console.log('animate is start')
			},
			animationendHandle() {
				//渲染背景颜色(right动画)
				let color = this.sviewlst.imgsview[this.activeviewindex].dominant;
				//触发背景动画
				this.SetBkRightAnimate(color);
			},

			//更新Scrollview内view块布局
			//offset: 为实现滑动动画效果,需要临近的2张图片做呼吸效果(焦点图逐渐放大缩小,相领的图逐渐缩小放大)，需要这个参数，
			// offset参数在 滑动scrollview的实时回调函数中计算 offset暂时设置为全局变量
			// offset相对于中点偏移,中点左边为负 右边为正 类似于线段图（） 本函数会根据offset和最大放大系数来计算放大系数
			// 焦点图中间点与屏幕中间点的偏移，通常不滑动的时候，焦点图总是显示在中间，且图的中间点总是与屏幕中间重合
			// 当为负的时候,与左边的index 进行互斥放大和缩小,
			// 当为0的时候,当前焦点图放到了最大
			// 当为正的时候,与右边的index 进行互斥放大和缩小      
			upDataScrollviewLayout(activeindex) {
				console.log('检测到 initScrollviewLayout');
				var that = this;

				this.upbkcolor = false;

				var that = this;
				if (this.images.length <= 0) {
					return
				};
				var offset = this.offset;

				//一、构造滚动组件内view块分布
				//1、左view块 留空用  为了让第一张图片可以居中
				var lview = {}
				lview.dec = "left view"
				lview.w = this.screencenterpos;
				lview.h = this.imgviewheight;
				lview.l = 0;
				lview.r = lview.l + lview.w;

				//2、处理中间imagelist块 								
				//2.1、设计默认大小的imageview块布局
				var arrimgview = [];
				var i = 0;
				while (i <= this.images.length - 1) {

					let obj = {
						index: i,
						url: '', //源  
						dec: '', //图像描述信息
						badeg: '', //角标文字
						badegcolor: this.badegcolor, //角标默认颜色
						dominant: this.bkstartcolor, //默认主色
						w: 0, //该view宽度
						h: 0, //该view高度								
						l: 0, //该view块左边距scroll容器左边距离
						r: 0, //该view右边距scroll容器左边距离
					}

					//合并外界传来image对象属性 若有重合的属性 后面的覆盖前面
					let imgview = Object.assign(obj, this.images[i]);

					//添加长宽等数据
					imgview.w = this.imgviewwidth;
					imgview.h = this.imgviewheight;

					if (i == 0) {
						imgview.l = lview.r + 0;
					} else {
						imgview.l = arrimgview[i - 1].r + 0;
					}
					imgview.r = imgview.l + imgview.w;

					arrimgview.push(imgview);
					i++;
				};

				//3、右边view块  留空用 为了让最后一张图片可以居中
				let rview = {}
				rview.dec = "right view"
				//使得最后一张图片中间部分对齐屏幕正中间
				rview.w = this.screencenterpos;
				rview.h = this.imgviewheight;
				if (arrimgview.length <= 0) {
					rview.l = lview.r + 0;
				} else {
					rview.l = arrimgview[arrimgview.length - 1].r + 0;
				}
				rview.r = rview.l + rview.w;

				//二、计算焦点图 焦点图左右临图的放大系数关系 修改相应块的高宽  	
				var leftaf = 1;
				var rightaf = 1;
				var activeaf = 1;
				var af = 0.18;
				//左右临图与焦点图的系数计算（焦点图总是与左临图 或者 右临图发生进退大小关系（2张图的关系 构成视觉动画））
				if (arrimgview.length > 0) {
					let aindex = activeindex;
					let lindex = parseInt(aindex) - 1;
					let rindex = parseInt(aindex) + 1;

					//取焦点imgview块(默认放大1.18倍)）宽度的一半
					let lw = (this.imgviewwidth * 1.18) / 2
					//根据偏移取计算百分比
					let bl = Math.abs(offset) / lw
					// 计算焦点放大系数 默认最大1.18							
					if (offset == 0) {
						activeaf = 1.18;
						leftaf = 1;
						rightaf = 1;
					}

					if (offset > 0) {
						activeaf = 1 + 0.18 * (1 - bl / 2)
						rightaf = 1 + (1.18 - activeaf)
						leftaf = 1;
					}

					if (offset < 0) {
						activeaf = 1 + 0.18 * (1 - bl / 2)
						leftaf = 1 + (1.18 - activeaf)
						rightaf = 1;
					}
					//设置焦点图放大系数
					if (aindex >= 0 && aindex <= arrimgview.length - 1) {
						arrimgview[aindex].w = this.imgviewwidth * activeaf;
						arrimgview[aindex].h = this.imgviewheight * activeaf;
					} else {
						console.log("焦点图越界");
						return;
					};

					//设置左临图 当offset小于0时,当前焦点图与左则相领图做拉扯动画
					if (offset < 0) {
						if (lindex >= 0) {
							arrimgview[lindex].w = this.imgviewwidth * leftaf;
							arrimgview[lindex].h = this.imgviewheight * leftaf;
						}
					}

					//设置右临图 当offset大于0时,当前焦点图与右则相领图做拉扯动画
					if (offset > 0) {
						if (rindex <= arrimgview.length - 1) {

							arrimgview[rindex].w = this.imgviewwidth * rightaf;
							arrimgview[rindex].h = this.imgviewheight * rightaf;
						}
					}
				}

				//三、 修正左右边距，lveiw rview视图大小等
				if (arrimgview.length > 0) {
					lview.w = lview.w - (arrimgview[0].w / 2);
					lview.r = lview.l + lview.w;
					for (let i = 0; i <= arrimgview.length - 1; i++) {
						if (i == 0) {
							arrimgview[i].l = lview.r + 0;
						} else {
							arrimgview[i].l = arrimgview[i - 1].r + 0;
						}
						arrimgview[i].r = arrimgview[i].l + arrimgview[i].w;
					};
					rview.w = rview.w - (arrimgview[arrimgview.length - 1].w / 2) + 0;
					rview.l = arrimgview[arrimgview.length - 1].r + 0;
					rview.r = rview.l + rview.w;
				}
				//四、更新data数据 因为在template中进行了绑定 根据vue双向数据特性 会更新界面 
				var obj = {
					'leftview': lview,
					'rightview': rview,
					'imgsview': arrimgview
				};

				this.activeviewindex = activeindex;
				this.sviewlst = obj;


				this.$nextTick(function() {
					var that = this
					if (this.istouchmove == true) {
						clearTimeout(that.TTT);
						var ai = that.activeviewindex;
						var TTT = setTimeout(function() {
							if (that.activeviewindex == ai) {
								that.$emit('clickimg', that.sviewlst.imgsview[that.activeviewindex]);
							}
						}, 300)
					}

				})
			},

			/* 取2个颜色之间的过渡色  参考自网络
			// startColor：开始颜色hex
			// endColor  ：结束颜色hex
			// count     : 产生几个    也就是步长
			// sample: colorarr = gradientColor(startcolor,endcolor,5);  生成5个过渡颜色
			*/
			gradientColor(startColor, endColor, count) {
				let startRGB = this.colorToRgb(startColor); //转换为rgb数组模式
				let startR = startRGB[0];
				let startG = startRGB[1];
				let startB = startRGB[2];

				let endRGB = this.colorToRgb(endColor);
				let endR = endRGB[0];
				let endG = endRGB[1];
				let endB = endRGB[2];

				let sR = (endR - startR) / count; //总差值
				let sG = (endG - startG) / count;
				let sB = (endB - startB) / count;

				var colorArr = [];
				for (var i = 0; i < count; i++) {
					//计算每一步的hex值
					var hex = this.colorToHex('rgb(' + parseInt((sR * i + startR)) + ',' + parseInt((sG * i + startG)) +
						',' +
						parseInt((sB * i + startB)) + ')');
					colorArr.push(hex);
				}
				return colorArr;
			},

			// 将hex表示方式转换为rgb表示方式(这里返回rgb数组模式)
			colorToRgb(sColor) {
				// <http://www.w3.org/TR/css3-color/#svg-color>
				var names = {
					aliceblue: "f0f8ff",
					antiquewhite: "faebd7",
					aqua: "0ff",
					aquamarine: "7fffd4",
					azure: "f0ffff",
					beige: "f5f5dc",
					bisque: "ffe4c4",
					black: "000",
					blanchedalmond: "ffebcd",
					blue: "00f",
					blueviolet: "8a2be2",
					brown: "a52a2a",
					burlywood: "deb887",
					burntsienna: "ea7e5d",
					cadetblue: "5f9ea0",
					chartreuse: "7fff00",
					chocolate: "d2691e",
					coral: "ff7f50",
					cornflowerblue: "6495ed",
					cornsilk: "fff8dc",
					crimson: "dc143c",
					cyan: "0ff",
					darkblue: "00008b",
					darkcyan: "008b8b",
					darkgoldenrod: "b8860b",
					darkgray: "a9a9a9",
					darkgreen: "006400",
					darkgrey: "a9a9a9",
					darkkhaki: "bdb76b",
					darkmagenta: "8b008b",
					darkolivegreen: "556b2f",
					darkorange: "ff8c00",
					darkorchid: "9932cc",
					darkred: "8b0000",
					darksalmon: "e9967a",
					darkseagreen: "8fbc8f",
					darkslateblue: "483d8b",
					darkslategray: "2f4f4f",
					darkslategrey: "2f4f4f",
					darkturquoise: "00ced1",
					darkviolet: "9400d3",
					deeppink: "ff1493",
					deepskyblue: "00bfff",
					dimgray: "696969",
					dimgrey: "696969",
					dodgerblue: "1e90ff",
					firebrick: "b22222",
					floralwhite: "fffaf0",
					forestgreen: "228b22",
					fuchsia: "f0f",
					gainsboro: "dcdcdc",
					ghostwhite: "f8f8ff",
					gold: "ffd700",
					goldenrod: "daa520",
					gray: "808080",
					green: "008000",
					greenyellow: "adff2f",
					grey: "808080",
					honeydew: "f0fff0",
					hotpink: "ff69b4",
					indianred: "cd5c5c",
					indigo: "4b0082",
					ivory: "fffff0",
					khaki: "f0e68c",
					lavender: "e6e6fa",
					lavenderblush: "fff0f5",
					lawngreen: "7cfc00",
					lemonchiffon: "fffacd",
					lightblue: "add8e6",
					lightcoral: "f08080",
					lightcyan: "e0ffff",
					lightgoldenrodyellow: "fafad2",
					lightgray: "d3d3d3",
					lightgreen: "90ee90",
					lightgrey: "d3d3d3",
					lightpink: "ffb6c1",
					lightsalmon: "ffa07a",
					lightseagreen: "20b2aa",
					lightskyblue: "87cefa",
					lightslategray: "789",
					lightslategrey: "789",
					lightsteelblue: "b0c4de",
					lightyellow: "ffffe0",
					lime: "0f0",
					limegreen: "32cd32",
					linen: "faf0e6",
					magenta: "f0f",
					maroon: "800000",
					mediumaquamarine: "66cdaa",
					mediumblue: "0000cd",
					mediumorchid: "ba55d3",
					mediumpurple: "9370db",
					mediumseagreen: "3cb371",
					mediumslateblue: "7b68ee",
					mediumspringgreen: "00fa9a",
					mediumturquoise: "48d1cc",
					mediumvioletred: "c71585",
					midnightblue: "191970",
					mintcream: "f5fffa",
					mistyrose: "ffe4e1",
					moccasin: "ffe4b5",
					navajowhite: "ffdead",
					navy: "000080",
					oldlace: "fdf5e6",
					olive: "808000",
					olivedrab: "6b8e23",
					orange: "ffa500",
					orangered: "ff4500",
					orchid: "da70d6",
					palegoldenrod: "eee8aa",
					palegreen: "98fb98",
					paleturquoise: "afeeee",
					palevioletred: "db7093",
					papayawhip: "ffefd5",
					peachpuff: "ffdab9",
					peru: "cd853f",
					pink: "ffc0cb",
					plum: "dda0dd",
					powderblue: "b0e0e6",
					purple: "800080",
					rebeccapurple: "663399",
					red: "f00",
					rosybrown: "bc8f8f",
					royalblue: "4169e1",
					saddlebrown: "8b4513",
					salmon: "fa8072",
					sandybrown: "f4a460",
					seagreen: "2e8b57",
					seashell: "fff5ee",
					sienna: "a0522d",
					silver: "c0c0c0",
					skyblue: "87ceeb",
					slateblue: "6a5acd",
					slategray: "708090",
					slategrey: "708090",
					snow: "fffafa",
					springgreen: "00ff7f",
					steelblue: "4682b4",
					tan: "d2b48c",
					teal: "008080",
					thistle: "d8bfd8",
					tomato: "ff6347",
					turquoise: "40e0d0",
					violet: "ee82ee",
					wheat: "f5deb3",
					white: "fff",
					whitesmoke: "f5f5f5",
					yellow: "ff0",
					yellowgreen: "9acd32"
				};
				var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
				var sColor = sColor.toLowerCase();

				//颜色常量转换
				if (sColor.slice(0, 1) != "#") {
					for (var name in names) {
						if (name == sColor) {
							var sColor = "#" + names[name];
						}
					}
				}; {
					if (sColor && reg.test(sColor)) {
						if (sColor.length === 4) {
							var sColorNew = "#";
							for (var i = 1; i < 4; i += 1) {
								sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
							}
							sColor = sColorNew;
						}
						//处理6位的颜色值
						var sColorChange = [];
						for (var i = 1; i < 7; i += 2) {
							sColorChange.push(parseInt("0x" + sColor.slice(i, i + 2)));
						}
						return sColorChange;
					} else {
						return sColor;
					}
				}
			},

			// 将rgb表示方式转换为hex表示方式
			colorToHex(rgb) {
				var _this = rgb;
				var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
				if (/^(rgb|RGB)/.test(_this)) {
					var aColor = _this.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
					var strHex = "#";
					for (var i = 0; i < aColor.length; i++) {
						var hex = Number(aColor[i]).toString(16);
						hex = hex < 10 ? 0 + '' + hex : hex; // 保证每个rgb的值为2位
						if (hex === "0") {
							hex += hex;
						}
						strHex += hex;
					}
					if (strHex.length !== 7) {
						strHex = _this;
					}

					return strHex;
				} else if (reg.test(_this)) {
					var aNum = _this.replace(/#/, "").split("");
					if (aNum.length === 6) {
						return _this;
					} else if (aNum.length === 3) {
						var numHex = "#";
						for (var i = 0; i < aNum.length; i += 1) {
							numHex += (aNum[i] + aNum[i]);
						}
						return numHex;
					}
				} else {
					return _this;
				}
			},
		},
	}
</script>

<style lang="scss" scoped="">
	// 创建一张隐藏的画布 用于取色
	.canvas-box {
		margin-left: 500upx;
		width: 0;
		height: 0;
		overflow: hidden
	}

	//画廊总容器 静态样式放这里  动态样式放template
	.gallerypanel {
		.scroll-view {
			.scroll-view-panle {
				display: flex;
				height: 100%;
				width: 100%;
				white-space: nowrap;

				.leftview {
					//动态
				}

				.imgviewpanel {
					.角标 {}

					.imgview {
						.图片 {}
					}

					.描述 {
						.文本 {}
					}
				}

				.rightview {
					//动态	
				}
			}
		}
	}

	// 隐藏滚动条 hbx1.8版本 这样写有错误（伪类错误） 需要把这代码放到小程序工具的main.wsxx中去
	// .gallerypanel ::-webkit-scrollbar {display: none;}
	// 	.scroll-view ::-webkit-scrollbar {
	// 	    display: none;
	// 	}


	.roundbadge {
		z-index: 2;
		display: flex;
		align-self: flex-end;
		align-items: center;
		justify-content: center;
		font-size: 12px;
		color: white;
		border-radius: 8px;
		min-width: 12px;
		min-height: 12px;
		max-height: 12px;
		padding: 3px 5px;
		margin-bottom: -17px; //17=12+5  12是圆角角标高度  5是图片中间的边距
		margin-right: 3px; //右边距是5px 这里取3
	}

	* {
		-webkit-overflow-scrolling: touch;
	}

	// 呼吸帧
	@keyframes living {
		0% {
			// transform-origin:'center bottom';
			transform: scale(1);
			opacity: 1;
		}

		50% {
			// transform-origin:'center bottom';
			transform: scale(1.05);
			opacity: 1;
			/*圆形放大的同时，透明度逐渐减小为0*/
		}

		100% {
			// transform-origin:'center bottom';
			transform: scale(1);
			opacity: 1;
		}
	}

	.trans-fadeout {
		//    -webkit-transition:all 0.2s linear;
		//    -moz-transition:all 0.2s linear;
		//    -ms-transition:all 0.2s linear;
		//    -o-transition:all 0.2s linear;
		animation: living 1s ease-in-out 1;
	}
</style>
