Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >hoverHook vue 鼠标悬浮 Hook

hoverHook vue 鼠标悬浮 Hook

作者头像
copy_left
发布于 2020-04-09 03:49:36
发布于 2020-04-09 03:49:36
1.1K00
代码可运行
举报
文章被收录于专栏:方球方球
运行总次数:0
代码可运行
使用例子

chart.gif

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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>
实现
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 ]
    
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
debounceHook Vue 防抖值 hook
使用例子 <template> <div class="home"> <div> <Card style='margin: 20% auto; width: 600px' title=''> <h2> {{ state.name }} </h2> <div> default: {{ state.age }} </div> <div> throttle: {{ info }} </div> <Button @click
copy_left
2020/04/09
6620
sizeHook vue dom尺寸监听 hook
chart.gif 使用例子 <template> <div class="home" ref='element'> <div> <Card style='margin: 20% auto; width: 600px' title=''> <h4> width: {{ size.width }} / height: {{ size.height }} </h4> </
copy_left
2020/04/09
1.3K0
scrollHook Vue 滚动监听钩子
chart.gif 使用例子 <template> <div class="home" > <Card style='margin: 20% auto; width: 600px' title='' > <p> {{ state }} </p> <div style='overflow: scroll; height: 200px' ref='element' > <h1 styl
copy_left
2020/04/09
1.3K0
clickAwayHook Vue 监听元素外事件 hook
chart.gif 使用例子 <template> <div class="home" > <Card style='margin: 20% auto; width: 600px' title='' > <h1> {{ state }} </h1> <Button ref='element' @click="innerClick"> inner </Button> </Card> </div> </template> <scrip
copy_left
2020/04/10
7410
clickAwayHook  Vue 监听元素外事件 hook
eventHook Vue 事件绑定hook
tt.gif 使用例子 <template> <div class="home"> <div> <div style='margin: 20% auto; width: 600px' title=''> <Client title='client one' v-bind='clientOne' /> <Client title='client two' v-bind='clientTwo' /> </div> </
copy_left
2020/04/09
5790
那些关于DOM的常见Hook封装(二)
本文是深入浅出 ahooks 源码系列文章的第十五篇,这个系列的目标主要有以下几点:
GopalFeng
2022/08/01
9290
throttleHook Vue 节流值 hook
使用例子 <template> <div class="home"> <div> <Card style='margin: 20% auto; width: 600px' title=''> <h2> {{ state.name }} </h2> <div> default: {{ state.age }} </div> <div> throttle: {{ info }} </div> <Button @click
copy_left
2020/04/09
4410
Vue3 Composition API教程及示例
Vue引入了Composition API(基于功能的API)作为当前基于Option的API的补充。该API将随Vue 3一起发布,但是现在您可以通过将Vue 3 Composition API添加到您的Vue 2应用程序中来进行尝试。
前端知否
2020/03/23
5K0
Vue3 Composition API教程及示例
throttleFnHook Vue 函数节流Hook
使用例子 <template> <div class="home"> <div> <Card style='margin: 20% auto; width: 600px' title='form'> <h4> {{state}} </h4> <Button @click="run"> add </Button> </Card> </div> </div> </template> <script> // import
copy_left
2020/04/09
3530
三种自定义 hook 的事件封装方式,你会选择哪种?
我们经常通过自定义 hook 的方式抽离组件的逻辑,而这种自定义 hook 里很多都是给元素绑定事件的。
神说要有光zxg
2024/04/19
2620
三种自定义 hook 的事件封装方式,你会选择哪种?
debounceFnHook vue函数防抖hook
使用例子 <template> <div class="home"> <div> <Card style='margin: 20% auto; width: 600px' title='form'> <h4> {{state}} </h4> <Input :value='state' @input='run' /> </Card> </div> </div> </template> <script> // im
copy_left
2020/04/09
3450
useDrop vue 拖拽hook
使用例子 <style> *{ margin: 0; padding: 0; } li{ list-style: none; } #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; m
copy_left
2020/04/30
6170
stroageState Vue 缓存hook
chart.gif 使用例子 <template> <div class="home"> <div> <Card style='margin: 20% auto; width: 600px' title=''> <p> {{ userInfo }} </p> <Input v-model="userName" /> <Button @click='updateUserName' > update </Button>
copy_left
2020/04/09
4060
useTextSelection vue 文本选择hook
文本选择 vx-hookhttps://www.npmjs.com/package/vx-hook vue 3.0 hook 库 getSelection 文本选择 Uesage <template> <div id="app"> {{ state }} <div ref='ele'> 测试文本 </div> </div> </template> <script> import { useTextSelection } from 'vx-hook'
copy_left
2020/05/09
8040
升级 Vue3 大幅提升开发运行效率
作者:louiszhai,腾讯 IEG 前端开发工程师 Vue3 性能提升了 1.3~2 倍,SSR 性能提升了 2~3 倍,升级 Vue3 正是当下。 背景 原计划 2019 年发布的 Vue3,又经过一年的再次打磨,终于于去年 9 月正式发布。随后,不少 UI 组件库都积极参与适配,去年 12 月,Element-plus(Element-ui 官方升级版)也发布了 beta 版。 由于项目中用到了 Element-ui 组件,组件库未适配的情况下,不敢贸然升级 Vue3。Element-plus
腾讯技术工程官方号
2021/04/27
2K0
React 进阶 - 事件系统
React 有一种事件插件机制,如 onClick 和 onChange ,会有不同的事件插件 SimpleEventPlugin ,ChangeEventPlugin 处理
Cellinlab
2023/05/17
1.2K0
React 进阶 - 事件系统
Vue开发仿京东商场app
vue3-jd-h5是一个电商H5页面前端项目,基于Vue 3.0.0 + Vant 3.0.0 实现,主要包括首页、分类页面、我的页面、购物车等,部分效果如下图。
xiangzhihong
2021/01/15
9830
ReactPortals传送门
React Portals提供了一种将子节点渲染到父组件以外的DOM节点的解决方案,即允许将JSX作为children渲染至DOM的不同部分,最常见用例是子组件需要从视觉上脱离父容器,例如对话框、浮动工具栏、提示信息等。
WindRunnerMax
2023/09/30
3830
mouseHook vue 鼠标移动hook
chart.gif 使用例子 <template> <div class="home" ref='element'> <div ref='hoverEle' > <Card style='margin: 20% auto; width: 600px' title='' > <div v-for='(value, key) of state' :key='key'> {{ key }} : {{ value }}
copy_left
2020/04/09
1.7K0
前端系列12集-全局API,组合式API,选项式API的使用
The setup() hook serves as the entry point for Composition API usage in components in the following cases: 在以下情况下, setup() 钩子用作组件中 Composition API 使用的入口点:
达达前端
2023/10/08
5960
相关推荐
debounceHook Vue 防抖值 hook
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验