gx
queenwuli
2021-01-28 b83ba3cc4687f21d744e9866e10e30e91229e8a4
hive-app/components/uni-swipe-action-item/mpwxs.js
New file
@@ -0,0 +1,116 @@
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()
      }
   }
}