@fe6/water-pro
Version:
An enterprise-class UI design language and Vue-based implementation
72 lines (57 loc) • 1.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useTimeoutFn = useTimeoutFn;
exports.useTimeoutRef = useTimeoutRef;
var _vue = require("vue");
var _shared = require("@fe6/shared");
var _vue2 = require("../vue");
var _warning = _interopRequireDefault(require("../warning"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/** @format */
function useTimeoutFn(handle, wait) {
var _native = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if (!(0, _shared.isFunction)(handle)) {
(0, _warning.default)('handle 参数是必须是 Function 类型!');
}
var _useTimeoutRef = useTimeoutRef(wait),
readyRef = _useTimeoutRef.readyRef,
stop = _useTimeoutRef.stop,
start = _useTimeoutRef.start;
if (_native) {
handle();
} else {
(0, _vue.watch)(readyRef, function (maturity) {
maturity && handle();
}, {
immediate: false
});
}
return {
readyRef: readyRef,
stop: stop,
start: start
};
}
function useTimeoutRef(wait) {
var readyRef = (0, _vue.ref)(false);
var timer;
function stop() {
readyRef.value = false;
timer && window.clearTimeout(timer);
}
function start() {
stop();
timer = setTimeout(function () {
readyRef.value = true;
}, wait);
}
start();
(0, _vue2.tryOnUnmounted)(stop);
return {
readyRef: readyRef,
stop: stop,
start: start
};
}