用防抖实现DIV鼠标移出消失

  由于div标签本身不支持onblur事件,所以对于点击一个按钮弹出的div,我们想要当这个div失去焦点的时候,让它消失不能使用的onblur来实现。
  但是可以利用onmouseout和事件来实现DIV失去焦点消失的功能。直接使用onmouseout来实现移出消失可能会有一个问题:假设你的按钮的位置和弹出的div的位置不是重合的那么会导致鼠标移动就会马上去触发onmouseout事件,从而没什么卵用。
  利用防抖、onmouseoutonmouseover组合来实现一个体验很好的blur事件

    /**
*鼠标移动过div事件
*/
function moveOverEvent(ele,outTimer) {
let overTimer = null;
return function(){
clearTimeout(outTimer); //div没有消失的情况下,在移动进来div,那么就清除上次移出的事件
clearTimeout(overTimer); //防抖
overTimer = setTimeout(()=>{
ele.style.display = "block";
},500);
}
}
    /**
* 鼠标移出
*/
function moveOutEvent(ele,outTimer) {
return function(){
clearTimeout(outTimer); //防抖
outTimer = setTimeout(()=>{ //移动出去后等500ms,在消失这div
ele.style.display = "none";
},500);
}
}

  然后无意中发现一个可以通过给div添加tabindex属性,从而实现blur事件,所以上面的代码可能是白写了。(PS 我感觉上面的体验会好一些,减少了很多误触)

//设置了tabindex后,元素默认加虚线,通过ouline=0进行去除(IE设置hidefocus="true")
<div tabindex="0" outline=0" hidefocus="true"></div>

DIV的失去焦点(blur)实现的更多相关文章

  1. 当输入域失去焦点 (blur) 时改变其颜色

    $("input").blur(function(){ $("input").css("background-color","#D ...

  2. Knockout: 实践CSS绑定和jQuery的blur失去焦点事件, 给未通过校验的输入框添加红色边框突出显示.

    目的: 实践一下Knockout提供的CSS绑定功能和JQuery的blur失去焦点事件, 这次不使用Knockout的afterkeydown事件了. 步骤: 先在htm中添加.error的css样 ...

  3. Vue在点击内部元素时(获得焦点),怎样让外部div元素样式变化?

    问题: div内部有很多元素,div. p. span .input等,各元素有嵌套,现在点击某元素时需要最外面这个div边框高亮,例如,点击了input开始输入 假设html 结构如下  <d ...

  4. 深入理解javascript中的焦点管理

    × 目录 [1]焦点元素 [2]获得焦点 [3]失去焦点[4]焦点事件 前面的话 焦点作为javascript中的一个重要功能,基本上和页面交互都离不开焦点.但却少有人对焦点管理系统地做总结归纳.本文 ...

  5. div/span等获取焦点问题(tabindex属性的简单理解)

    1.先看问题 当我们要对一个div/span元素获取焦点的时候,直接对$("#div1").focus()是不能实现效果的,比如下图: 当点击输入框进行输入后,在点击区域弹出选择地 ...

  6. 启用div作为编辑器 添加contentEditalbe属性

    1.自从HTML5中新引入了contentEditalbe属性以后,div就与textarea一样,可以作为最常用的编辑器使用. 1.启用div作为编辑器 让div进入编辑状态很简单,只需要: 复制代 ...

  7. div块级元素获取焦点

    在做弹出层时需要对div获取失去焦点 focus blur只是针对form表单控件的,而对于 span , div , li 之类的,则没办法触发它们的动作 几个事件(摘自w3c). blur事件: ...

  8. blur和click事件的先后顺序问题

    这两个同时用会有冲突.懒得翻译了,需要的自己看哈. 以下摘自stackoverflow. I have an input field, where I try to make autocomplete ...

  9. 转:大气炫酷焦点轮播图js特效

    使用方法 Step 1. 在html的标签内引入相关文件 <script type="text/javascript" src="js/myfocus-2.0.0. ...

随机推荐

  1. ionic3 修改打包时 android sdk 路径

    修改 /platforms/android/local.properties 文件

  2. 50)PHP,单例模式

    class B{ ; private static $instance; private function __construct(){} public static function getNew( ...

  3. C#面向对象---对象成员、方法加载、引用类库

    一.方法重载: 1.两个函数同名,就互相构成方法的重载关系 2.重载的函数,必须跟其他函数之间具有不同的参数类型或参数个数 二.字段与属性 类的字段: 类里面是可以直接定义变量的,这些变量就叫类的字段 ...

  4. Revit二次开发-获取材质的纹理贴图

    通过IExportContext导出类中的Onmaterial()方法,可以获取到材质相关信息,主要是材质ID,再根据材质ID得到材质对象material,然后通过如下代码获取Asset对象: Ele ...

  5. 96)PHP,文件上传(2)

    (1)那么既然看到文件即使上传成功,但是只是在脚本周期内有效,脚本只要结束(脚本结束其实很快的),文件就会自动消失,那么怎么才能永久存储文件呢: 函数: Move_uploaded_file(上传临时 ...

  6. 93)PHP,session代码练习

    (1)开启session Session_start(): (2)session值的设定: <?php session_start(); $_SESSION['name']='xiaohua'; ...

  7. WebFilter 在springBoot工程中不起作用

    [1]@ServletComponentScan 必须有一个注解将带有@WebFilter的类包含进去. [2]自定义 FiltersConfig extends WebMvcConfigurerAd ...

  8. Serializable 接口(序列化)

    目录 Serializable 接口(序列化) 前言 用途 如何实现 异常 serialVersionUID transient关键字 Serializable 接口(序列化) 前言 查看API文档时 ...

  9. percent|Cane|confess|ballot|conceal

    You got 20 percent of the answers right - that means one in every five.你20%的答案是对的,也就是说每5个中有1个是对的. N- ...

  10. POJ 1251 & HDU 1301 Jungle Roads

    题目: Description The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign ...