| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 | 
							- import { VantComponent } from '../common/component';
 
- import { touch } from '../mixins/touch';
 
- import { range } from '../common/utils';
 
- const THRESHOLD = 0.3;
 
- let ARRAY = [];
 
- VantComponent({
 
-     props: {
 
-         disabled: Boolean,
 
-         leftWidth: {
 
-             type: Number,
 
-             value: 0,
 
-             observer(leftWidth = 0) {
 
-                 if (this.offset > 0) {
 
-                     this.swipeMove(leftWidth);
 
-                 }
 
-             },
 
-         },
 
-         rightWidth: {
 
-             type: Number,
 
-             value: 0,
 
-             observer(rightWidth = 0) {
 
-                 if (this.offset < 0) {
 
-                     this.swipeMove(-rightWidth);
 
-                 }
 
-             },
 
-         },
 
-         asyncClose: Boolean,
 
-         name: {
 
-             type: null,
 
-             value: '',
 
-         },
 
-     },
 
-     mixins: [touch],
 
-     data: {
 
-         catchMove: false,
 
-         wrapperStyle: '',
 
-     },
 
-     created() {
 
-         this.offset = 0;
 
-         ARRAY.push(this);
 
-     },
 
-     destroyed() {
 
-         ARRAY = ARRAY.filter((item) => item !== this);
 
-     },
 
-     methods: {
 
-         open(position) {
 
-             const { leftWidth, rightWidth } = this.data;
 
-             const offset = position === 'left' ? leftWidth : -rightWidth;
 
-             this.swipeMove(offset);
 
-             this.$emit('open', {
 
-                 position,
 
-                 name: this.data.name,
 
-             });
 
-         },
 
-         close() {
 
-             this.swipeMove(0);
 
-         },
 
-         swipeMove(offset = 0) {
 
-             this.offset = range(offset, -this.data.rightWidth, this.data.leftWidth);
 
-             const transform = `translate3d(${this.offset}px, 0, 0)`;
 
-             const transition = this.dragging
 
-                 ? 'none'
 
-                 : 'transform .6s cubic-bezier(0.18, 0.89, 0.32, 1)';
 
-             this.setData({
 
-                 wrapperStyle: `
 
-         -webkit-transform: ${transform};
 
-         -webkit-transition: ${transition};
 
-         transform: ${transform};
 
-         transition: ${transition};
 
-       `,
 
-             });
 
-         },
 
-         swipeLeaveTransition() {
 
-             const { leftWidth, rightWidth } = this.data;
 
-             const { offset } = this;
 
-             if (rightWidth > 0 && -offset > rightWidth * THRESHOLD) {
 
-                 this.open('right');
 
-             }
 
-             else if (leftWidth > 0 && offset > leftWidth * THRESHOLD) {
 
-                 this.open('left');
 
-             }
 
-             else {
 
-                 this.swipeMove(0);
 
-             }
 
-             this.setData({ catchMove: false });
 
-         },
 
-         startDrag(event) {
 
-             if (this.data.disabled) {
 
-                 return;
 
-             }
 
-             this.startOffset = this.offset;
 
-             this.touchStart(event);
 
-         },
 
-         noop() { },
 
-         onDrag(event) {
 
-             if (this.data.disabled) {
 
-                 return;
 
-             }
 
-             this.touchMove(event);
 
-             if (this.direction !== 'horizontal') {
 
-                 return;
 
-             }
 
-             this.dragging = true;
 
-             ARRAY.filter((item) => item !== this && item.offset !== 0).forEach((item) => item.close());
 
-             this.setData({ catchMove: true });
 
-             this.swipeMove(this.startOffset + this.deltaX);
 
-         },
 
-         endDrag() {
 
-             if (this.data.disabled) {
 
-                 return;
 
-             }
 
-             this.dragging = false;
 
-             this.swipeLeaveTransition();
 
-         },
 
-         onClick(event) {
 
-             const { key: position = 'outside' } = event.currentTarget.dataset;
 
-             this.$emit('click', position);
 
-             if (!this.offset) {
 
-                 return;
 
-             }
 
-             if (this.data.asyncClose) {
 
-                 this.$emit('close', {
 
-                     position,
 
-                     instance: this,
 
-                     name: this.data.name,
 
-                 });
 
-             }
 
-             else {
 
-                 this.swipeMove(0);
 
-             }
 
-         },
 
-     },
 
- });
 
 
  |