index.js 1.75 KB
// #ifndef APP-PLUS || MP-WEIXIN || H5
export default {
	data() {
		return {
			useAngle: 0,
			transform: '',
			startX: 0,
			lastLeft: 0,
			resetAni: false
		}
	},
	created() {
		this.useAngle = this.angle
	},
	watch: {
		angle(val) {
			this.useAngle = this.angle
		},
		reset(val) {
			this.startX = 0;
			this.lastLeft = 0;
			this.styleChange(0, 0)
		}
	},
	methods: {
		styleChange(left, deg) {
			if (left == 0 && deg == this.angle) {
				this.resetAni = true
			} else {
				this.resetAni = false
			}
			this.transform = 'translate3d(' + left + 'px,0,0)'
			this.useAngle = deg
		},
		touchstart(e) {
			let touch = e.touches[0] || e.changedTouches[0];
			this.startX = touch.clientX
		},
		touchmove(e) {
			if (this.isPass || !this.show) return;
			let touch = e.touches[0] || e.changedTouches[0]
			let pageX = touch.clientX;
			let left = pageX - this.startX + this.lastLeft;
			left = left < 0 ? 0 : left;
			let width = this.sliderWidth - this.sliderHeight;
			left = left >= width ? width : left;
			this.startX = pageX
			this.lastLeft = left
			let deg = 360 / width * left + Number(this.angle)
			this.styleChange(left, deg)
		},
		touchend(e) {
			if (this.isPass || !this.show) return;
			let left = this.sliderWidth - this.sliderHeight;
			let deg = 360 / left * this.lastLeft + Number(this.angle)
			if (this.type == 1) {
				if (Math.abs(deg - 360) <= this.errorRange || Math.abs(deg) <= this.errorRange) {
					this.styleChange(this.lastLeft, deg)
					this.success()
				} else {
					this.startX = 0;
					this.lastLeft = 0;
					this.styleChange(0, Number(this.angle))
					this.error()
				}
			} else {
				this.result({
					angle: deg - Number(this.angle)
				})
			}

		}
	}
}

// #endif

// #ifdef APP-PLUS|| MP-WEIXIN || H5 
export default {}
// #endif