const threshold = 50
							 | 
						|
								export default {
							 | 
						|
									props: {
							 | 
						|
										//点击事件位置设置
							 | 
						|
										clickOption: {
							 | 
						|
											type: Object,
							 | 
						|
											default () {
							 | 
						|
												return {
							 | 
						|
													width: uni.upx2px(200),
							 | 
						|
													height: uni.upx2px(200),
							 | 
						|
													left: 'auto',
							 | 
						|
													top: 'auto'
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
									},
							 | 
						|
									computed: {
							 | 
						|
										//点击区域左边位置
							 | 
						|
										clickLeft () {
							 | 
						|
											return typeof this.clickOption.left == 'number' ? this.clickOption.left : (this.windowWidth / 2) - (this.clickOption.width / 2)
							 | 
						|
										},
							 | 
						|
										//点击区域右边位置
							 | 
						|
										clickRight () {
							 | 
						|
											return this.clickLeft + this.clickOption.width
							 | 
						|
										},
							 | 
						|
										//点击区域顶部位置
							 | 
						|
										clickTop () {
							 | 
						|
											return typeof this.clickOption.top == 'number' ? this.clickOption.top : (this.windowHeight / 2) - (this.clickOption.height / 2)
							 | 
						|
										},
							 | 
						|
										//点击区域底部位置
							 | 
						|
										clickBottom () {
							 | 
						|
											return this.clickTop + this.clickOption.height
							 | 
						|
										}
							 | 
						|
									},
							 | 
						|
									data () {
							 | 
						|
										return {
							 | 
						|
											autoplaySync: false,
							 | 
						|
											windowHeight: 0,//组件高度
							 | 
						|
											windowWidth: 0,//组件宽度
							 | 
						|
											clickTime: 0,//点击次数
							 | 
						|
											touchstartX: 0,//触摸开始x轴位置
							 | 
						|
											touchstartY: 0,//触摸开始y轴位置
							 | 
						|
											touchmoveX: 0,//触摸滑动x轴距离
							 | 
						|
											touchmoveY: 0,//触摸滑动y轴距离
							 | 
						|
											touchTime: 0//触摸时间
							 | 
						|
										}
							 | 
						|
									},
							 | 
						|
									methods: {
							 | 
						|
										touchstart (e) {
							 | 
						|
											if ( this.pageType != 'scroll' ) this.autoplaySync = false//如果是翻页阅读关闭自动播放
							 | 
						|
											if ( this.touchTimer ) {//清楚定时任务
							 | 
						|
												clearTimeout(this.touchTimer)
							 | 
						|
												this.touchTimer = null
							 | 
						|
											}
							 | 
						|
											if ( this.longTimer ) {//清楚定时任务
							 | 
						|
												clearTimeout(this.longTimer)
							 | 
						|
												this.longTimer = null
							 | 
						|
											}
							 | 
						|
											const touch = e.touches[0]
							 | 
						|
											this.touchstartX = touch.pageX
							 | 
						|
											this.touchstartY = touch.pageY
							 | 
						|
											//点击在规定区域中
							 | 
						|
											if ( this.touchstartX >= this.clickLeft && this.touchstartX <= this.clickRight && this.touchstartY >= this.clickTop && this.touchstartY <= this.clickBottom) {
							 | 
						|
												this.clickTime++
							 | 
						|
												if ( this.clickTime == 1 ) {//第一次点击 
							 | 
						|
													this.touchTimer = setTimeout(() => {
							 | 
						|
														this.touchTime = 300
							 | 
						|
													}, 300)
							 | 
						|
													this.longTimer = setTimeout(() => {
							 | 
						|
														this.touchTime = 500
							 | 
						|
														if ( this.touchmoveX <= threshold && this.touchmoveY <= threshold ) this.$emit('long-click')//抛出长按事件
							 | 
						|
														this.resetTouch()
							 | 
						|
													}, 500)
							 | 
						|
												}
							 | 
						|
											} else {//没有点击在规定区域中直接重置触摸事件
							 | 
						|
												this.resetTouch()
							 | 
						|
											}
							 | 
						|
										},
							 | 
						|
										touchmove (e) {
							 | 
						|
											if ( this.clickTime > 0 ) {
							 | 
						|
												const touch = e.touches[0]
							 | 
						|
												this.touchmoveX = Math.abs(touch.pageX - this.touchstartX)
							 | 
						|
												this.touchmoveY = Math.abs(touch.pageY - this.touchstartY)
							 | 
						|
											}
							 | 
						|
										},
							 | 
						|
										touchend (e) {
							 | 
						|
											if ( this.pageType != 'scroll' ) this.autoplaySync = this.autoplay//如果是横向翻页开启自动播放
							 | 
						|
											if ( this.touchTimer ) {//清楚按下定时任务
							 | 
						|
												clearTimeout(this.touchTimer);
							 | 
						|
												this.touchTimer = null
							 | 
						|
											}
							 | 
						|
											if ( this.longTimer ) {//清楚长按定时任务
							 | 
						|
												clearTimeout(this.longTimer)
							 | 
						|
												this.longTimer = null
							 | 
						|
											}
							 | 
						|
											//点击次数为零或者触摸时间超过300,或者滑动距离超过阙值
							 | 
						|
											if ( this.clickTime == 0 || this.touchTime > 300 || this.touchmoveX > threshold || this.touchmoveY > threshold ) {
							 | 
						|
												this.resetTouch()
							 | 
						|
												return
							 | 
						|
											}
							 | 
						|
											if ( this.clickTime == 1 ) {//第一次点击
							 | 
						|
												this.touchTimer = setTimeout(() => {
							 | 
						|
													this.$emit('single-click')//抛出单击事件
							 | 
						|
													this.resetTouch()
							 | 
						|
												}, 300)
							 | 
						|
											}
							 | 
						|
											if ( this.clickTime == 2 ) {//第二次点击
							 | 
						|
												this.$emit('double-click')//抛出双击事件
							 | 
						|
												this.resetTouch()
							 | 
						|
											}
							 | 
						|
										},
							 | 
						|
										resetTouch () {
							 | 
						|
											this.touchstartX = 0
							 | 
						|
											this.touchstartY = 0
							 | 
						|
											this.touchmoveX = 0
							 | 
						|
											this.touchmoveY = 0
							 | 
						|
											this.touchTime = 0
							 | 
						|
											this.clickTime = 0
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
								}
							 |