@ant-design-vue/use
Version:
Vue 3 Composition Api Library.
76 lines (62 loc) • 1.54 kB
JavaScript
import { ref, watch } from 'vue';
/**
* useHover
*
* @param {Ref<HTMLElement>)} ele
* @param {Options} [options]
* @returns
*/
function useHover(target, options) {
if (!target) {
console.warn("fucntiuon useHover first parameter expect HTMLElement | Ref<HTMLElement>,bug got ".concat(target));
return;
}
var isHovering = ref(null);
var _ref = options || {},
onEnter = _ref.onEnter,
onLeave = _ref.onLeave;
var onMouseEnter = function onMouseEnter(e) {
if (onEnter) {
onEnter(e);
}
isHovering.value = true;
};
var onMouseLeave = function onMouseLeave(e) {
if (onLeave) {
onLeave(e);
}
isHovering.value = false;
};
var _addListeners = function _addListeners(ele) {
if (ele) {
ele.addEventListener('mouseenter', onMouseEnter);
ele.addEventListener('mouseleave', onMouseLeave);
}
};
var _removeListeners = function _removeListeners(ele) {
if (ele) {
ele.removeEventListener('mouseenter', onMouseEnter);
ele.removeEventListener('mouseleave', onMouseLeave);
}
};
var removelistener = function removelistener() {
_removeListeners(target.value);
destoryWatcher();
};
var destoryWatcher = watch(target, function (newValue, oldValue) {
if (newValue) {
_addListeners(newValue);
}
if (oldValue) {
_removeListeners(oldValue);
}
}, {
flush: 'post'
});
return [isHovering, {
actions: {
removelistener: removelistener
}
}];
}
export default useHover;