text: let otherMixins = {}
  
  // #ifndef APP-PLUS|| MP-WEIXIN  ||  H5
  const MIN_DISTANCE = 10;
  otherMixins =  {
  	data() {
  		// TODO 随机生生元素ID，解决百度小程序获取同一个元素位置信息的bug
  		const elClass = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}`
  		return {
  			uniShow: false,
  			left: 0,
  			buttonShow: 'none',
  			ani: false,
  			moveLeft:'',
  			elClass
  		}
  	},
  	watch: {
  		show(newVal) {
  			if (this.autoClose) return
  			this.openState(newVal)
  		},
  		left(){
  			this.moveLeft = `translateX(${this.left}px)`
  		},
  		buttonShow(newVal){
  			if (this.autoClose) return
  			this.openState(newVal)
  		},
  		leftOptions() {
  			this.init()
  		},
  		rightOptions() {
  			this.init()
  		}
  	},
  	mounted() {
  		this.swipeaction = this.getSwipeAction()
  		if (this.swipeaction.children !== undefined) {
  			this.swipeaction.children.push(this)
  		}
  		this.init()
  	},
  	methods: {
  		init(){
  			clearTimeout(this.timer)
  			this.timer = setTimeout(() => {
  				this.getSelectorQuery()
  			}, 100)
  			// 移动距离
  			this.left = 0
  			this.x = 0
  		},
  
  		closeSwipe(e) {
  			if (!this.autoClose) return
  			this.swipeaction.closeOther(this)
  		},
  		appTouchStart(e) {
  			const {
  				clientX
  			} = e.changedTouches[0]
  			this.clientX = clientX
  			this.timestamp = new Date().getTime()
  		},
  		appTouchEnd(e, index, item, position) {
  			const {
  				clientX
  			} = e.changedTouches[0]
  			// fixed by xxxx 模拟点击事件，解决 ios 13 点击区域错位的问题
  			let diff = Math.abs(this.clientX - clientX)
  			let time = (new Date().getTime()) - this.timestamp
  			if (diff < 40 && time < 300) {
  				this.$emit('click', {
  					content: item,
  					index,
  					position
  				})
  			}
  		},
  		touchstart(e) {
  			if (this.disabled) return
  			this.ani = false
  			this.x = this.left || 0
  			this.stopTouchStart(e)
  			this.autoClose && this.closeSwipe()
  		},
  		touchmove(e) {
  			if (this.disabled) return
  			// 是否可以滑动页面
  			this.stopTouchMove(e);
  			if (this.direction !== 'horizontal') {
  				return;
  			}
  			this.move(this.x + this.deltaX)
  			return false
  		},
  		touchend() {
  			if (this.disabled) return
  			this.moveDirection(this.left)
  		},
  		/**
  		 * 设置移动距离
  		 * @param {Object} value
  		 */
  		move(value) {
  			value = value || 0
  			const leftWidth = this.leftWidth
  			const rightWidth = this.rightWidth
  			// 获取可滑动范围
  			this.left = this.range(value, -rightWidth, leftWidth);
  		},
  
  		/**
  		 * 获取范围
  		 * @param {Object} num
  		 * @param {Object} min
  		 * @param {Object} max
  		 */
  		range(num, min, max) {
  			return Math.min(Math.max(num, min), max);
  		},
  		/**
  		 * 移动方向判断
  		 * @param {Object} left
  		 * @param {Object} value
  		 */
  		moveDirection(left) {
  			const threshold = this.threshold
  			const isopen = this.isopen || 'none'
  			const leftWidth = this.leftWidth
  			const rightWidth = this.rightWidth
  			if (this.deltaX === 0) {
  				this.openState('none')
  				return
  			}
  			if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > 0 && rightWidth +
  					left < threshold)) {
  				// right
  				this.openState('right')
  			} else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > 0 &&
  					leftWidth - left < threshold)) {
  				// left
  				this.openState('left')
  			} else {
  				// default
  				this.openState('none')
  			}
  		},
  
  		/**
  		 * 开启状态
  		 * @param {Boolean} type
  		 */
  		openState(type) {
  			const leftWidth = this.leftWidth
  			const rightWidth = this.rightWidth
  			let left = ''
  			this.isopen = this.isopen ? this.isopen : 'none'
  			switch (type) {
  				case "left":
  					left = leftWidth
  					break
  				case "right":
  					left = -rightWidth
  					break
  				default:
  					left = 0
  			}
  
  
  			if (this.isopen !== type) {
  				this.throttle = true
  				this.$emit('change', type)
  			}
  
  			this.isopen = type
  			// 添加动画类
  			this.ani = true
  			this.$nextTick(() => {
  				this.move(left)
  			})
  			// 设置最终移动位置,理论上只要进入到这个函数，肯定是要打开的
  		},
  		close() {
  			this.openState('none')
  		},
  		getDirection(x, y) {
  			if (x > y && x > MIN_DISTANCE) {
  				return 'horizontal';
  			}
  			if (y > x && y > MIN_DISTANCE) {
  				return 'vertical';
  			}
  			return '';
  		},
  
  		/**
  		 * 重置滑动状态
  		 * @param {Object} event
  		 */
  		resetTouchStatus() {
  			this.direction = '';
  			this.deltaX = 0;
  			this.deltaY = 0;
  			this.offsetX = 0;
  			this.offsetY = 0;
  		},
  
  		/**
  		 * 设置滑动开始位置
  		 * @param {Object} event
  		 */
  		stopTouchStart(event) {
  			this.resetTouchStatus();
  			const touch = event.touches[0];
  			this.startX = touch.clientX;
  			this.startY = touch.clientY;
  		},
  
  		/**
  		 * 滑动中，是否禁止打开
  		 * @param {Object} event
  		 */
  		stopTouchMove(event) {
  			const touch = event.touches[0];
  			this.deltaX = touch.clientX - this.startX;
  			this.deltaY = touch.clientY - this.startY;
  			this.offsetX = Math.abs(this.deltaX);
  			this.offsetY = Math.abs(this.deltaY);
  			this.direction = this.direction || this.getDirection(this.offsetX, this.offsetY);
  		},
  
  		getSelectorQuery() {
  			const views = uni.createSelectorQuery().in(this)
  			views
  				.selectAll('.'+this.elClass)
  				.boundingClientRect(data => {
  					if(data.length === 0) return
  					let show = 'none'
  					if (this.autoClose) {
  						show = 'none'
  					} else {
  						show = this.show
  					}
  					this.leftWidth = data[0].width || 0
  					this.rightWidth = data[1].width || 0
  					this.buttonShow = show
  				})
  				.exec()
  		}
  	}
  }
  
  // #endif
  
  export default otherMixins
  