tdesign-mobile-vue
Version:
tdesign-mobile-vue
143 lines (140 loc) • 4.4 kB
JavaScript
/**
* 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