博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jQuery:hover延时效果的一些处理
阅读量:6520 次
发布时间:2019-06-24

本文共 1960 字,大约阅读时间需要 6 分钟。

一开始鼠标的hover事件我都会用css:hover伪类来实现,它的特点也很明显,就是无延时立即触发,但有时可能会造成一些干扰,想要用户体验更好的话就要用js。

比如,让鼠标在元素上停留规定时间内才触发hover事件。我在一篇博文上找到一段比较好的处理代码 :

(function($){    $.fn.hoverDelay = function(options){        var defaults = {            // 鼠标经过的延时时间            hoverDuring: 200,            // 鼠标移出的延时时间            outDuring: 200,            // 鼠标经过执行的方法            hoverEvent: function(){                // 设置为空函数,绑定的时候由使用者定义                $.noop();            },            // 鼠标移出执行的方法            outEvent: function(){                $.noop();                }        };        var sets = $.extend(defaults,options || {});        var hoverTimer, outTimer;        return $(this).each(function(){            $(this).hover(function(){                // 清除定时器                clearTimeout(outTimer);                hoverTimer = setTimeout(sets.hoverEvent,                    sets.hoverDuring);                }, function(){                    clearTimeout(hoverTimer);                    outTimer = setTimeout(sets.outEvent,                        sets.outDuring);                });                });    }      })(jQuery);    // 具体使用,给id为“#test”的元素添加hoverEvent事件$("#test").hoverDelay({    // 自定义,outEvent同    hoverEvent: function(){        alert("经过我!");    }});

这段代码好在于把鼠标经过事件和延时分离出来,延时以及延迟的清除都交由hoverDelay来处理,具体hover事件自己自定,是一段能够很通用的代码。

但运用起来还有些小问题,在自定义hoverEvent、outEvent中使用this的话,它所指向的是window这个对象,而不是当前上下文,所以我改进了下,通过apply()来实现this绑定。
改进部分:

return $(this).each(function(){        // 保存当前上下文的this对象        var $this = $(this)        $this.hover(function(){            clearTimeout(outTimer);            hoverTimer = setTimeout(function () {                // 调用替换                sets.hoverEvent.apply($this);            }, sets.hoverDuring);        }, function(){            clearTimeout(hoverTimer);            outTimer = setTimeout(function () {                sets.outEvent.apply($this);            }, sets.outDuring);        });    });

改完以后我自己的小项目都用这个方法来处理hover或者其他的延时效果了。

转载地址:http://bmrfo.baihongyu.com/

你可能感兴趣的文章
boost库在工作(15)绑定器与函数对象之三
查看>>
【noip模拟题】迎接仪式(dp+特殊的技巧)
查看>>
C/C++产生随机数
查看>>
android WebView总结
查看>>
How to get blob data using javascript XmlHttpRequest by sync
查看>>
Asynchronous Programming Using Delegates使用委托进行异步编程
查看>>
代码是写给人看的,不是写个机器看的
查看>>
sina微博上看到的关于android界面设计相关的规范
查看>>
STL笔记(2) STL之父访谈录
查看>>
heartbeat测试
查看>>
STL——空间的配置和释放std::alloc(第一级配置器和第二级配置器)
查看>>
微软职位内部推荐-Senior Software Engineer II-Search
查看>>
PHP 的解压缩ZipArchive中的extractTo()方法 LINUX+nginx环境中解压zip时文件丢失的问题...
查看>>
ylbtech-LanguageSamples-ExplicitInterface(显示接口)
查看>>
RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)
查看>>
Google Mesa概览
查看>>
【Android开发】之Fragment生命周期
查看>>
[LeetCode] Clone Graph 无向图的复制
查看>>
我们搞开发的为什么会感觉到累(转)
查看>>
AfxMessageBox和MessageBox差别
查看>>