New file |
| | |
| | | export default { |
| | | data() { |
| | | return { |
| | | position: [], |
| | | button: {}, |
| | | btn: "[]" |
| | | } |
| | | }, |
| | | // computed: { |
| | | // pos() { |
| | | // return JSON.stringify(this.position) |
| | | // }, |
| | | // btn() { |
| | | // return JSON.stringify(this.button) |
| | | // } |
| | | // }, |
| | | watch: { |
| | | button: { |
| | | handler(newVal) { |
| | | this.btn = JSON.stringify(newVal) |
| | | }, |
| | | deep: true |
| | | }, |
| | | show(newVal) { |
| | | if (this.autoClose) return |
| | | if (!this.button) { |
| | | this.init() |
| | | return |
| | | } |
| | | this.button.show = newVal |
| | | }, |
| | | leftOptions() { |
| | | this.init() |
| | | }, |
| | | rightOptions() { |
| | | this.init() |
| | | } |
| | | }, |
| | | created() { |
| | | if (this.swipeaction.children !== undefined) { |
| | | this.swipeaction.children.push(this) |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.init() |
| | | }, |
| | | beforeDestroy() { |
| | | this.swipeaction.children.forEach((item, index) => { |
| | | if (item === this) { |
| | | this.swipeaction.children.splice(index, 1) |
| | | } |
| | | }) |
| | | }, |
| | | methods: { |
| | | init() { |
| | | clearTimeout(this.swipetimer) |
| | | this.swipetimer = setTimeout(() => { |
| | | this.getButtonSize() |
| | | }, 50) |
| | | }, |
| | | closeSwipe(e) { |
| | | if (!this.autoClose) return |
| | | this.swipeaction.closeOther(this) |
| | | }, |
| | | |
| | | change(e) { |
| | | this.$emit('change', e.open) |
| | | let show = this.button.show |
| | | if (show !== e.open) { |
| | | this.button.show = e.open |
| | | } |
| | | |
| | | }, |
| | | |
| | | 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 |
| | | }) |
| | | } |
| | | }, |
| | | getButtonSize() { |
| | | const views = uni.createSelectorQuery().in(this) |
| | | views |
| | | .selectAll('.uni-swipe_button-group') |
| | | .boundingClientRect(data => { |
| | | let show = 'none' |
| | | if (this.autoClose) { |
| | | show = 'none' |
| | | } else { |
| | | show = this.show |
| | | } |
| | | this.button = { |
| | | data, |
| | | show |
| | | } |
| | | }) |
| | | .exec() |
| | | } |
| | | } |
| | | } |