成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

jQuery:hover延時(shí)效果的一些處理

yunhao / 1678人閱讀

摘要:比如,讓鼠標(biāo)在元素上停留規(guī)定時(shí)間內(nèi)才觸發(fā)事件。改進(jìn)部分保存當(dāng)前上下文的對(duì)象調(diào)用替換改完以后我自己的小項(xiàng)目都用這個(gè)方法來處理或者其他的延時(shí)效果了。

一開始鼠標(biāo)的hover事件我都會(huì)用css:hover偽類來實(shí)現(xiàn),它的特點(diǎn)也很明顯,就是無延時(shí)立即觸發(fā),但有時(shí)可能會(huì)造成一些干擾,想要用戶體驗(yàn)更好的話就要用js。
比如,讓鼠標(biāo)在元素上停留規(guī)定時(shí)間內(nèi)才觸發(fā)hover事件。我在一篇博文上找到一段比較好的處理代碼 :
文章出處

(function($){
    $.fn.hoverDelay = function(options){
        var defaults = {
            // 鼠標(biāo)經(jīng)過的延時(shí)時(shí)間
            hoverDuring: 200,
            // 鼠標(biāo)移出的延時(shí)時(shí)間
            outDuring: 200,
            // 鼠標(biāo)經(jīng)過執(zhí)行的方法
            hoverEvent: function(){
                // 設(shè)置為空函數(shù),綁定的時(shí)候由使用者定義
                $.noop();
            },
            // 鼠標(biāo)移出執(zhí)行的方法
            outEvent: function(){
                $.noop();    
            }
        };
        var sets = $.extend(defaults,options || {});
        var hoverTimer, outTimer;
        return $(this).each(function(){
            $(this).hover(function(){
                // 清除定時(shí)器
                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("經(jīng)過我!");
    }
});

這段代碼好在于把鼠標(biāo)經(jīng)過事件和延時(shí)分離出來,延時(shí)以及延遲的清除都交由hoverDelay來處理,具體hover事件自己自定,是一段能夠很通用的代碼。
但運(yùn)用起來還有些小問題,在自定義hoverEvent、outEvent中使用this的話,它所指向的是window這個(gè)對(duì)象,而不是當(dāng)前上下文,所以我改進(jìn)了下,通過apply()來實(shí)現(xiàn)this綁定。
改進(jìn)部分:

return $(this).each(function(){
        // 保存當(dāng)前上下文的this對(duì)象
        var $this = $(this)
        $this.hover(function(){
            clearTimeout(outTimer);
            hoverTimer = setTimeout(function () {
                // 調(diào)用替換
                sets.hoverEvent.apply($this);
            }, sets.hoverDuring);
        }, function(){
            clearTimeout(hoverTimer);
            outTimer = setTimeout(function () {
                sets.outEvent.apply($this);
            }, sets.outDuring);
        });
    });

改完以后我自己的小項(xiàng)目都用這個(gè)方法來處理hover或者其他的延時(shí)效果了。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/91255.html

相關(guān)文章

  • CSS transition delay簡介與進(jìn)階應(yīng)用

    摘要:用來定義元素兩種狀態(tài)之間的過渡。到目前為止,我們利用完全模擬了第一部分我們使用實(shí)現(xiàn)的功能,而且看上去更簡潔。附上利用來實(shí)現(xiàn)該方案的代碼用于參考。由于代碼效果時(shí)好時(shí)壞,猜測可能與的容器相關(guān)。 背景 在日常的項(xiàng)目開發(fā)中,我們會(huì)很經(jīng)常的遇見如下的需求: 在瀏覽器頁面中,當(dāng)鼠標(biāo)移動(dòng)到某個(gè)部分后,另一個(gè)部分在延遲若干時(shí)間后出現(xiàn) 在鼠標(biāo)移除該區(qū)域后,另一部分也在延遲若干時(shí)間后消失 我相信這是一...

    e10101 評(píng)論0 收藏0
  • JavaScript 節(jié)流函數(shù) throttle 詳解

    摘要:后續(xù)的一些輔助性優(yōu)化讀者可以自己琢磨,如函數(shù)指向,返回值保存等。 原文:https://keelii.github.io/2016/06/11/javascript-throttle/ 在瀏覽器 DOM 事件里面,有一些事件會(huì)隨著用戶的操作不間斷觸發(fā)。比如:重新調(diào)整瀏覽器窗口大?。╮esize),瀏覽器頁面滾動(dòng)(scroll),鼠標(biāo)移動(dòng)(mousemove)。也就是說用戶在觸發(fā)這些瀏覽...

    instein 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<