@fe6/water-pro
Version:
An enterprise-class UI design language and Vue-based implementation
57 lines (50 loc) • 1.19 kB
JavaScript
/** @format */
import { ref, watch } from 'vue';
import { isFunction } from '@fe6/shared';
import { tryOnUnmounted } from '../vue';
import warning from '../warning';
export function useTimeoutFn(handle, wait) {
var _native = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if (!isFunction(handle)) {
warning('handle 参数是必须是 Function 类型!');
}
var _useTimeoutRef = useTimeoutRef(wait),
readyRef = _useTimeoutRef.readyRef,
stop = _useTimeoutRef.stop,
start = _useTimeoutRef.start;
if (_native) {
handle();
} else {
watch(readyRef, function (maturity) {
maturity && handle();
}, {
immediate: false
});
}
return {
readyRef: readyRef,
stop: stop,
start: start
};
}
export function useTimeoutRef(wait) {
var readyRef = ref(false);
var timer;
function stop() {
readyRef.value = false;
timer && window.clearTimeout(timer);
}
function start() {
stop();
timer = setTimeout(function () {
readyRef.value = true;
}, wait);
}
start();
tryOnUnmounted(stop);
return {
readyRef: readyRef,
stop: stop,
start: start
};
}