<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>
							 |