123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- // #ifdef APP-NVUE
- const dom = weex.requireModule('dom');
- // #endif
- export default {
- data() {
- return {
- uniShow: false,
- left: 0
- }
- },
- computed: {
- moveLeft() {
- return `translateX(${this.left}px)`
- }
- },
- watch: {
- show(newVal) {
- if (!this.position || JSON.stringify(this.position) === '{}') return;
- if (this.autoClose) return
- if (newVal) {
- this.$emit('change', true)
- this.open()
- } else {
- this.$emit('change', false)
- this.close()
- }
- }
- },
- mounted() {
- this.position = {}
- if (this.swipeaction.children !== undefined) {
- this.swipeaction.children.push(this)
- }
- setTimeout(() => {
- this.getSelectorQuery()
- }, 100)
- },
- beforeDestoy() {
- this.swipeaction.children.forEach((item, index) => {
- if (item === this) {
- this.swipeaction.children.splice(index, 1)
- }
- })
- },
- methods: {
- onClick(index, item) {
- this.$emit('click', {
- content: item,
- index
- })
- this.close()
- },
- touchstart(e) {
- const {
- pageX
- } = e.touches[0]
- if (this.disabled) return
- const left = this.position.content.left
- if (this.autoClose) {
- this.swipeaction.closeOther(this)
- }
- this.width = pageX - left
- if (this.isopen) return
- if (this.uniShow) {
- this.uniShow = false
- this.isopen = true
- this.openleft = this.left + this.position.button.width
- }
- },
- touchmove(e, index) {
- if (this.disabled) return
- const {
- pageX
- } = e.touches[0]
- this.setPosition(pageX)
- },
- touchend() {
- if (this.disabled) return
- if (this.isopen) {
- this.move(this.openleft, 0)
- return
- }
- this.move(this.left, -40)
- },
- setPosition(x, y) {
- if (!this.position.button.width) {
- return
- }
- // this.left = x - this.width
- this.setValue(x - this.width)
- },
- setValue(value) {
- // 设置最大最小值
- this.left = Math.max(-this.position.button.width, Math.min(parseInt(value), 0))
- this.position.content.left = this.left
- if (this.isopen) {
- this.openleft = this.left + this.position.button.width
- }
- },
- move(left, value) {
- if (left >= value) {
- this.$emit('change', false)
- this.close()
- } else {
- this.$emit('change', true)
- this.open()
- }
- },
- open() {
- this.uniShow = true
- this.left = -this.position.button.width
- this.setValue(-this.position.button.width)
- },
- close() {
- this.uniShow = true
- this.setValue(0)
- setTimeout(() => {
- this.uniShow = false
- this.isopen = false
- }, 300)
- },
- getSelectorQuery() {
- // #ifndef APP-NVUE
- const views = uni.createSelectorQuery()
- .in(this)
- views
- .selectAll('.selector-query-hock')
- .boundingClientRect(data => {
- this.position.content = data[1]
- this.position.button = data[0]
- if (this.autoClose) return
- if (this.show) {
- this.open()
- } else {
- this.close()
- }
- })
- .exec()
- // #endif
- // #ifdef APP-NVUE
- dom.getComponentRect(this.$refs['selector-content-hock'], (data) => {
- if (this.position.content) return
- this.position.content = data.size
- })
- dom.getComponentRect(this.$refs['selector-button-hock'], (data) => {
- if (this.position.button) return
- this.position.button = data.size
- if (this.autoClose) return
- if (this.show) {
- this.open()
- } else {
- this.close()
- }
- })
- // #endif
- }
- }
- }
|