分享一个jquery插件,弥补一下hover事件的小小不足
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了分享一个jquery插件,弥补一下hover事件的小小不足,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3540字,纯文字阅读大概需要6分钟。
内容图文
hover事件有一个缺点:当你的鼠标无意划过一个dom元素(瞬间划过,这个时候用户可能不想触发hover事件),会触发hover事件
应该设置一个时差来控制hover事件的触发
比如jd左边的菜单 你用鼠标瞬间划过他子菜单会弹出然后立即消失, 用户体验非常的不好.
易迅的菜单就没有这个问题
delayHover来解决这个问题
啥也不说了先看调用…………………………
调用方式:
var duration = 500;// 延迟500毫秒 $(‘#div1‘).delayHover(function () { $(this).css(‘background‘, ‘#ccc‘); }, function () { $(this).css(‘background‘, ‘#000‘); }, duration)
duration表示延迟多少时间来触发hover事件
实现原理
设置一个定时器来开启hover事件
上代码
$.fn.delayHover = function (fnOver, fnOuter, duration) { var _this = thisvar timerOut; //开启hover的定时器 $(this).hover(function () { timerOut = setTimeout(function () { fnOver.call(_this); }, duration) }, function () { clearTimeout(timerOut) fnOuter.call(_this);; }) }
fnOver开启一个定时器
fnOuter关闭定时器
bug修复:
1.fnOuter每次都会执行(即使fnOver不执行)
2.duration对传入的值进行安全监测
; (function ($) { $.fn.delayHover = function (fnOver, fnOut, duration) { var _this = this; var timeouter; var defaultDuration = 500;//默认500 毫秒var fnOver_Running = false; //函数已经执行//重置durationif (typeof duration != "number" ||//不是字符串 isNaN(duration) || //NaN duration < 0) { //非法值 duration = defaultDuration; } $(_this).hover(function (event) { timeouter = setTimeout(function () { fnOver_Running = true; fnOver.call(_this, event) }, duration); }, function (event) { clearTimeout(timeouter); if (fnOver_Running) { fnOver_Running = false; fnOut.call(_this, event); } }); return $(this); } })(jQuery);
完整代码
<! DOCTYPE html > < html xmlns ="http://www.w3.org/1999/xhtml" > < head > < meta http-equiv ="Content-Type" content ="text/html; charset=utf-8" /> < title ></ title > < script src ="//code.jquery.com/jquery-1.11.0.min.js" ></ script > < style > .hover { background : #000 ; color : #fff ; } </ style > < script > ; ( function ($) { $.fn.delayHover = function (fnOver, fnOut, duration) { var _this = this ; var timeouter; var defaultDuration = 500 ; // 默认500 毫秒 var fnOver_Running = false ; // 函数已经执行 // 重置duration if ( typeof duration != " number " || // 不是字符串 isNaN(duration) || // NaN duration < 0 ) { // 非法值 duration = defaultDuration; } $(_this).hover( function (event) { timeouter = setTimeout( function () { fnOver_Running = true ; fnOver.call(_this, event) }, duration); }, function (event) { clearTimeout(timeouter); if (fnOver_Running) { fnOver_Running = false ; fnOut.call(_this, event); } }); return $( this ); } })(jQuery); </ script > < script > $( function () { $( ‘ #hovertest ‘ ).hover( function () { console.log( ‘ 指向 ‘ ); $( this ).addClass( ‘ hover ‘ ); }, function () { console.log( ‘ 离开 ‘ ); $( this ).removeClass( ‘ hover ‘ ); }); $( ‘ #delayHover ‘ ).delayHover( function () { console.log( ‘ 指向 ‘ ); $( this ).addClass( ‘ hover ‘ ); }, function () { console.log( ‘ 离开 ‘ ); $( this ).removeClass( ‘ hover ‘ ); }, 500 ); $( ‘ #delayHover1 ‘ ).delayHover( function () { console.log( ‘ 指向 ‘ ); $( this ).addClass( ‘ hover ‘ ); }, function () { console.log( ‘ 离开 ‘ ); $( this ).removeClass( ‘ hover ‘ ); }, 3000 ); }) </ script > </ head > < body > < h1 > hover事件有一个缺点:不能延时显示 < br /> < i >delayHover</i>解决了这个问题 </h1><div id="hovertest" style="border:1px solid #ccc; "> 这个是hover事件 指向我看看效果 </div><div id="delayHover" style="margin-top:100px;"> 这个是delayHover事件 指向我看看效果 默认值500毫秒 </div><div id="delayHover1" style=""> 这个是delayHover事件 指向我看看效果 延迟3000毫秒 </div></body></html>
欢迎提bug
原文:http://www.cnblogs.com/bestdqf/p/3915570.html
内容总结
以上是互联网集市为您收集整理的分享一个jquery插件,弥补一下hover事件的小小不足全部内容,希望文章能够帮你解决分享一个jquery插件,弥补一下hover事件的小小不足所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。