|                                                                                                                                                                                                                          |  | <template>	<view v-if="visible" class="circle y-flex" ref="loading" :style="{		width: pixelSize + 'px',		height: pixelSize + 'px',		'border-radius': pixelSize + 'px'	}">		<view		class="line y-flex"		:style="{			'border-top-width': (pixelSize / 4) + 'px',			'border-bottom-width': (pixelSize / 4) + 'px',			'border-top-color': item.top,			'border-bottom-color': item.bottom,			width: (pixelSize / 12) + 'px',			left: ((pixelSize / 2) - (pixelSize / 24)) + 'px',		}"		:class="'line_' + index"		v-for="(item, index) in rgbs" :key="index"></view>	</view></template>
<script>	// #ifdef APP-NVUE
	const Binding = uni.requireNativePlugin('bindingx');	// #endif
	export default {		props: {			visible: {				type: Boolean,				default: true			},			size: {				type: [Number, String],				default: 40			},			color: {				type: String,				default: '#333333'			}		},		computed: {			rgbs () {				const rgb = this.hexToRgb(this.color).replace('rgb(', '').replace(')', '')				return [{					top: `rgba(${rgb}, 1)`,					bottom: `rgba(${rgb}, .4)`				},{					top: `rgba(${rgb}, .4)`,					bottom: `rgba(${rgb}, .5)`				},{					top: `rgba(${rgb}, .4)`,					bottom: `rgba(${rgb}, .6)`				},{					top: `rgba(${rgb}, .4)`,					bottom: `rgba(${rgb}, .7)`				},{					top: `rgba(${rgb}, .4)`,					bottom: `rgba(${rgb}, .8)`				},{					top: `rgba(${rgb}, .4)`,					bottom: `rgba(${rgb}, .9)`				}]			},			pixelSize () {				return this.unitpixel(this.size)			}		},		data () {			return {				loading_binding: null			}		},		mounted() {			// #ifdef APP-NVUE
			this.$nextTick( function () {				if ( this.visible ) this.start()			})			// #endif
		},		beforeDestroy() {			// #ifdef APP-NVUE
			if ( this.loading_binding ) {				Binding.unbind({					token: this.loading_binding.token,					eventType: 'timing'				})				this.loading_binding = null			}			// #endif
		},		methods: {			start () {				const loading = this.getEl(this.$refs.loading);				this.loading_binding = Binding.bind({				    eventType: 'timing',				    props: [{				        element: loading,				        property: 'transform.rotateZ',				        expression: 'floor(t/100)*30'				    }]				});			},			unitpixel (size) {				const text = size.toString()				return text.indexOf('rpx') > -1 ? uni.upx2px(text.replace('rpx', '')) : text.indexOf('px') > -1 ? parseFloat(text.replace('px', '')) : uni.upx2px(text)			},			hexToRgb (hex) {				hex = hex.length == 7 ? hex : '#' + hex.slice(1, 4) + hex.slice(1, 4)				let str="rgb("				const r = parseInt(hex.slice(1,3),16).toString();   //ff  slice不包括end
				const g = parseInt(hex.slice(3,5),16).toString();   //00
				const b = parseInt(hex.slice(5,7),16).toString();   //ff
				str += r+","+g+","+b+")";				return str			},			getEl (el) {			    if (typeof el === 'string' || typeof el === 'number') return el;				if (WXEnvironment) {				    return el.ref;				} else {				    return el instanceof HTMLElement ? el : el.$el;				}			}		},		watch: {			visible (newVal) {				// #ifdef APP-NVUE
				this.$nextTick(() => {					if ( newVal ) {						this.start()					} else {						if ( this.loading_binding ) {							Binding.unbind({								token: this.loading_binding.token,								eventType: 'timing'							})							this.loading_binding = null						}					}				})				// #endif
			}		}	}</script>
<style scoped>	/* #ifndef APP-NVUE */	@keyframes loading{		0% {			transform: rotateZ(30deg);		}		9.33333%{			transform: rotateZ(60deg);		}		18.66666%{			transform: rotateZ(90deg);		}		27.99999%{			transform: rotateZ(120deg);		}		37.33332%{			transform: rotateZ(150deg);		}		46.66665%{			transform: rotateZ(180deg);		}		55.99998%{			transform: rotateZ(210deg);		}		65.33331%{			transform: rotateZ(240deg);		}		74.66664%{			transform: rotateZ(270deg);		}		83.99997%{			transform: rotateZ(300deg);		}		93.33333%{			transform: rotateZ(330deg);		}		100%{			transform: rotateZ(360deg);		}	}	/* #endif */	.circle {		position: relative;		/* #ifndef APP-NVUE */		animation: loading 1200ms step-start infinite;		/* #endif */	}	.circle .line {		position: absolute;		border-top-style: solid;		border-bottom-style: solid;		top: 0;		bottom: 0;	}	.circle .line_0 {	}	.circle .line_1 {		transform: rotateZ(30deg);	}	.circle .line_2 {		transform: rotateZ(60deg);	}	.circle .line_3 {		transform: rotateZ(90deg);	}	.circle .line_4 {		transform: rotateZ(120deg);	}	.circle .line_5 {		transform: rotateZ(150deg);	}</style>
 |