after-leave.js 894 B

123456789101112131415161718192021222324252627
  1. /**
  2. * Bind after-leave event for vue instance. Make sure after-leave is called in any browsers.
  3. *
  4. * @param {Vue} instance Vue instance.
  5. * @param {Function} callback callback of after-leave event
  6. * @param {Number} speed the speed of transition, default value is 300ms
  7. * @param {Boolean} once weather bind after-leave once. default value is false.
  8. */
  9. export default function(instance, callback, speed = 300, once = false) {
  10. if (!instance || !callback) throw new Error('instance & callback is required');
  11. let called = false;
  12. const afterLeaveCallback = function() {
  13. if (called) return;
  14. called = true;
  15. if (callback) {
  16. callback.apply(null, arguments);
  17. }
  18. };
  19. if (once) {
  20. instance.$once('after-leave', afterLeaveCallback);
  21. } else {
  22. instance.$on('after-leave', afterLeaveCallback);
  23. }
  24. setTimeout(() => {
  25. afterLeaveCallback();
  26. }, speed + 100);
  27. };