UNPKG

tdesign-mobile-vue

Version:
143 lines (140 loc) 4.4 kB
/** * tdesign v1.12.1 * (c) 2025 TDesign Group * @license MIT */ var DEFAULT_DELAY = { startTime: 50, stayTime: 70 }; var CTX_KEY = Symbol("v-hover"); function resolveBinding(binding) { if (!binding.value) { return { className: "", disabledHover: true, startTime: DEFAULT_DELAY.startTime, stayTime: DEFAULT_DELAY.stayTime }; } if (typeof binding.value === "string") { return { className: binding.value, disabledHover: false, startTime: DEFAULT_DELAY.startTime, stayTime: DEFAULT_DELAY.stayTime }; } var _binding$value = binding.value, className = _binding$value.className, _binding$value$disabl = _binding$value.disabledHover, disabledHover = _binding$value$disabl === void 0 ? false : _binding$value$disabl, _binding$value$startT = _binding$value.startTime, startTime = _binding$value$startT === void 0 ? DEFAULT_DELAY.startTime : _binding$value$startT, _binding$value$stayTi = _binding$value.stayTime, stayTime = _binding$value$stayTi === void 0 ? DEFAULT_DELAY.stayTime : _binding$value$stayTi; return { className: className, disabledHover: disabledHover, startTime: startTime, stayTime: stayTime }; } var Hover = { created: function created(el, binding) { var state = resolveBinding(binding); var ctx = { current: state, timers: [], add: function add() { if (ctx.current.disabledHover || !ctx.current.className) return; if (!el.classList.contains(ctx.current.className)) { el.classList.add(ctx.current.className); } }, remove: function remove() { if (ctx.current.className) el.classList.remove(ctx.current.className); }, downHandler: function downHandler() { if (ctx.current.disabledHover) return; ctx.timers.push(window.setTimeout(function () { ctx.add(); }, ctx.current.startTime)); }, upHandler: function upHandler() { if (ctx.current.disabledHover) return; ctx.timers.push(window.setTimeout(function () { ctx.remove(); }, ctx.current.stayTime)); }, cancelHandler: function cancelHandler() { ctx.remove(); } }; el[CTX_KEY] = ctx; var hasPointer = "PointerEvent" in window; if (hasPointer) { el.addEventListener("pointerdown", ctx.downHandler, { passive: true }); el.addEventListener("pointerup", ctx.upHandler, { passive: true }); el.addEventListener("pointercancel", ctx.cancelHandler, { passive: true }); el.addEventListener("pointerleave", ctx.cancelHandler, { passive: true }); } else { el.addEventListener("touchstart", ctx.downHandler, { passive: true }); el.addEventListener("touchend", ctx.upHandler, { passive: true }); el.addEventListener("touchcancel", ctx.cancelHandler, { passive: true }); el.addEventListener("touchmove", ctx.cancelHandler, { passive: true }); } }, updated: function updated(el, binding) { var ctx = el[CTX_KEY]; if (!ctx) return; var next = resolveBinding(binding); var prev = ctx.current; if (prev.className !== next.className) { if (prev.className) el.classList.remove(prev.className); if (!next.disabledHover && next.className && el.matches(":active")) { el.classList.add(next.className); } } ctx.current = next; }, unmounted: function unmounted(el) { var ctx = el[CTX_KEY]; if (!ctx) return; ctx.timers.forEach(function (t) { return window.clearTimeout(t); }); ctx.remove(); var hasPointer = "PointerEvent" in window; if (hasPointer) { el.removeEventListener("pointerdown", ctx.downHandler); el.removeEventListener("pointerup", ctx.upHandler); el.removeEventListener("pointercancel", ctx.cancelHandler); el.removeEventListener("pointerleave", ctx.cancelHandler); } else { el.removeEventListener("touchstart", ctx.downHandler); el.removeEventListener("touchend", ctx.upHandler); el.removeEventListener("touchcancel", ctx.cancelHandler); el.removeEventListener("touchmove", ctx.cancelHandler); } delete el[CTX_KEY]; } }; export { Hover as default }; //# sourceMappingURL=hover.js.map