taro-hooks
Version:
为 Taro 而设计的 Hooks Library
48 lines • 1.48 kB
JavaScript
import { vibrateLong, vibrateShort } from '@tarojs/taro';
import { useRef, useEffect } from '@taro-hooks/core';
import usePromise from '../usePromise';
export var VIBRATEINTERVAL;
(function (VIBRATEINTERVAL) {
VIBRATEINTERVAL[VIBRATEINTERVAL["SHORT"] = 15] = "SHORT";
VIBRATEINTERVAL[VIBRATEINTERVAL["LONG"] = 400] = "LONG";
VIBRATEINTERVAL[VIBRATEINTERVAL["DEFAULT"] = 200] = "DEFAULT";
})(VIBRATEINTERVAL || (VIBRATEINTERVAL = {}));
function useVibrate(interval, gap) {
if (gap === void 0) {
gap = VIBRATEINTERVAL.DEFAULT;
}
var timer = useRef();
var clear = function clear() {
if (timer.current) {
clearTimeout(timer.current);
timer.current = undefined;
}
};
var vibrateLongAsync = usePromise(vibrateLong);
var vibrateShortAsync = usePromise(vibrateShort);
var vibrate = function vibrate(useLong) {
var implementMethod = useLong ? vibrateLongAsync : vibrateShortAsync;
return implementMethod().then(function (res) {
if (interval) {
var vibrateInterval = gap + (useLong ? VIBRATEINTERVAL.LONG : VIBRATEINTERVAL.SHORT);
clear();
timer.current = setTimeout(function () {
vibrate(useLong);
}, vibrateInterval);
}
return res;
});
};
useEffect(function () {
return function () {
if (timer.current && interval) {
clear();
}
};
}, [timer, interval]);
return {
vibrate: vibrate,
clear: clear
};
}
export default useVibrate;