chart.gif
<template>
<div class="home" ref='element'>
<div ref='hoverEle' >
<Card style='margin: 20% auto; width: 600px' title='' >
{{ isHover }}
</Card>
</div>
</div>
</template>
<script>
// import { ref } from '@vue/composition-api'
import hoverHook from '@/hooks/hoverHook'
export default {
setup(){
const [ isHover, hoverEle ] = hoverHook({
onEnter(e){ console.log('enter >>>', e) },
onLeave(e){ console.log('leave >>>', e) },
})
return {
isHover,
hoverEle
}
}
}
</script>
import { ref, watch, computed } from '@vue/composition-api'
import boolHook from './boolHook'
/**
* dom 鼠标悬浮事件 hook
* @param { { dom, onEnter, onLeave } } options 配置 dom 初始绑定dom onEnter 滑出事件 onLeave 滑出事件
* @returns { [ state, element ] } state 滑入状态 element dom绑定ref
*
* @example
*
* setup
*
* const [ isHover, hoverEle ] = hoverHook({
onEnter(e){ console.log('enter >>>', e) },
onLeave(e){ console.log('leave >>>', e) },
})
*
* 模板
*
* <div ref='hoverEle' >
<Card style='margin: 20% auto; width: 600px' title='' >
{{ isHover }}
</Card>
</div>
*
*/
export default function hoverHook(options={}){
const { dom, onEnter, onLeave } = options
const element = ref(null)
const onEnterRef = ref(onEnter)
const onLeaveRef = ref(onLeave)
const { state, setTrue, setFalse } = boolHook(false)
const targetElement = computed(() => {
const ele = dom ? dom.value : element.value
return ele || element.value
})
const onMouseEnter = () => {
onEnterRef.value && onEnterRef.value()
setTrue()
}
const onMouseLeave = () => {
onLeaveRef.value && onLeaveRef.value()
setFalse()
}
watch(() => targetElement.value, (val, oldVal) =>{
if(oldVal){
oldVal.removeEventListener('mouseenter', onMouseEnter);
oldVal.removeEventListener('mouseleave', onMouseLeave);
}
if(val){
val.addEventListener('mouseenter', onMouseEnter);
val.addEventListener('mouseleave', onMouseLeave);
}
})
return [ state, element ]
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有