maz-ui
Version:
A standalone components library for Vue.Js 3 & Nuxt.Js 3
1 lines • 891 B
JavaScript
import{ref}from"vue";function useTimer({timeout=1e3,callback,remainingTimeUpdate=200,callbackOffsetTime=0}){let internalTimeout=ref(timeout);let remainingTime=ref(timeout);let timerId;function start(timeout){typeof timeout==`number`&&(remainingTime.value=timeout),typeof timeout==`number`&&(internalTimeout.value=timeout),startInterval()}function startInterval(){timerId||=setInterval(()=>{remainingTime.value-=remainingTimeUpdate,remainingTime.value<=0&&(stop(),setTimeout(()=>callback?.(),callbackOffsetTime))},remainingTimeUpdate)}function pause(){timerId&&=(clearInterval(timerId),void 0)}function resume(){!timerId&&remainingTime.value>0&&startInterval()}function stop(){setTimeout(()=>remainingTime.value=internalTimeout.value,callbackOffsetTime*2),pause()}function reset(){remainingTime.value=internalTimeout.value}return{remainingTime,start,pause,resume,stop,reset}}export{useTimer};