瀏覽代碼

retire transitionend

Leopoldthecoder 8 年之前
父節點
當前提交
2dd085b403
共有 3 個文件被更改,包括 15 次插入14 次删除
  1. 2 4
      packages/loading/src/directive.js
  2. 6 9
      packages/loading/src/index.js
  3. 7 1
      packages/loading/src/loading.vue

+ 2 - 4
packages/loading/src/directive.js

@@ -36,8 +36,7 @@ exports.install = Vue => {
       });
     } else {
       if (el.domVisible) {
-        const destroyElement = function() {
-          el.mask.removeEventListener('transitionend', destroyElement);
+        el.instance.$on('after-leave', _ => {
           el.domVisible = false;
           if (binding.modifiers.fullscreen && el.originalOverflow !== 'hidden') {
             document.body.style.overflow = el.originalOverflow;
@@ -47,8 +46,7 @@ exports.install = Vue => {
           } else {
             el.style.position = el.originalPosition;
           }
-        };
-        el.mask.addEventListener('transitionend', destroyElement);
+        });
         el.instance.visible = false;
       }
     }

+ 6 - 9
packages/loading/src/index.js

@@ -17,14 +17,6 @@ let fullscreenLoading;
 LoadingConstructor.prototype.originalPosition = '';
 LoadingConstructor.prototype.originalOverflow = '';
 
-const destroyElement = function() {
-  this.$el.removeEventListener('transitionend', destroyElement);
-  this.$el &&
-  this.$el.parentNode &&
-  this.$el.parentNode.removeChild(this.$el);
-  this.$destroy();
-};
-
 LoadingConstructor.prototype.close = function() {
   if (this.fullscreen && this.originalOverflow !== 'hidden') {
     document.body.style.overflow = this.originalOverflow;
@@ -37,7 +29,12 @@ LoadingConstructor.prototype.close = function() {
   if (this.fullscreen) {
     fullscreenLoading = undefined;
   }
-  this.$el.addEventListener('transitionend', destroyElement.bind(this));
+  this.$on('after-leave', _ => {
+    this.$el &&
+    this.$el.parentNode &&
+    this.$el.parentNode.removeChild(this.$el);
+    this.$destroy();
+  });
   this.visible = false;
 };
 

+ 7 - 1
packages/loading/src/loading.vue

@@ -1,5 +1,5 @@
 <template>
-  <transition name="el-loading-fade">
+  <transition name="el-loading-fade" @after-leave="handleAfterLeave">
     <div
       v-show="visible"
       class="el-loading-mask"
@@ -23,6 +23,12 @@
         visible: false,
         customClass: ''
       };
+    },
+
+    methods: {
+      handleAfterLeave() {
+        this.$emit('after-leave');
+      }
     }
   };
 </script>