hover事件延遲處理程式碼例項詳解
大多數情況下,網站的hover事件都沒有進行延遲處理。
但是有些時候延遲處理可以提高網站的效能。比如,我們看完第一個選項卡的內容之後,再去看第四個選項卡的內容,這個時候可能滑鼠會滑過第二個、第三個,於是這兩個選項卡的內容就有可能被展示,這並不是我們想要的,使用hover事件延遲處理可以有效解決此問題。先看一個沒有延遲效果的選項卡:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> *{ margin:0; padding:0; } body{ font:12px Verdana, Geneva, sans-serif; color:#404040; } .tabs { margin:10px 0 0 20px; width:360px; position:relative; overflow:hidden; height:160px; } .tabs span { z-index:2; font-size:12px; border:1px solid #d5d5d5; width:95px; height:25px; line-height:25px; text-align:center; float:left; margin-right:5px; cursor:pointer; } span.active{ background-color:#d5d5d5; } #tab-01, #tab-02, #tab-03{ position:absolute; top:26px; left:0; width:338px; padding:10px; height:93px; border:1px solid #d5d5d5; z-index:1; } #tab-02, #tab-03{ display:none; } </style> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> <script type="text/javascript"> $(document).ready(function () { $('.tabs span').mouseover(function () { $('.tabs div').hide(); $(this) .siblings('span') .removeClass('active') .end() .addClass('active') .next('div') .show(); }); }); </script> </head> <body> <div class="tabs"> <span class="active">螞蟻部落一</span> <div id="tab-01">螞蟻部落一</div> <span>螞蟻部落二</span> <div id="tab-02">螞蟻部落二</div> <span>螞蟻部落三</span> <div id="tab-03">螞蟻部落三</div> </div> </body> </html>
上面的程式碼實現了普通的選項卡效果,當我們無意中滑過任何一個選項卡都會產生效果。
下面就看使用延遲技術改造上面的程式碼,如下:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> *{ margin:0; padding:0; } body{ font:12px Verdana, Geneva, sans-serif; color:#404040; } .tabs { margin:10px 0 0 20px; width:360px; position:relative; overflow:hidden; height:160px; } .tabs span { z-index:2; font-size:12px; border:1px solid #d5d5d5; width:95px; height:25px; line-height:25px; text-align:center; float:left; margin-right:5px; cursor:pointer; } span.active{ background-color:#d5d5d5; } #tab-01, #tab-02, #tab-03{ position:absolute; top:26px; left:0; width:338px; padding:10px; height:93px; border:1px solid #d5d5d5; z-index:1; } #tab-02, #tab-03{ display:none; } </style> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> <script type="text/javascript"> $(document).ready(function () { $.fn.hoverDelay = function (options) { var defaults = { hoverDuring: 200, hoverEvent: function () { $.noop(); } }; var sets = $.extend(defaults, options || {}); var hoverTimer, outTimer; return $(this).each(function () { $(this).hover(function () { clearTimeout(hoverTimer); var _this = this; hoverTimer = setTimeout(sets.hoverEvent, sets.hoverDuring,_this); }); }); } var done=function (_this) { $('.tabs div').hide(); $(_this) .siblings('span') .removeClass('active') .end() .addClass('active') .next('div') .show(); }; $('.tabs span').hoverDelay({ hoverEvent: done }); }); </script> </head> <body> <div class="tabs"> <span class="active">螞蟻部落一</span> <div id="tab-01">螞蟻部落一</div> <span>螞蟻部落二</span> <div id="tab-02">螞蟻部落二</div> <span>螞蟻部落三</span> <div id="tab-03">螞蟻部落三</div> </div> </body> </html>
上面的程式碼實現了我們的要求,下面介紹一下它的實現過程。
一.程式碼註釋:
(1).$(document).ready(function () {}),當文件結構完全載入完畢再去執行函式中的程式碼。
(2). $.fn.hoverDelay = function (options) {},為jquery例項物件自頂一個hoverDelay方法,此方法實現了延遲效果。
(3).var defaults = {
hoverDuring: 200,
hoverEvent: function () {
$.noop();
}
},此物件儲存的是一些預設引數值。
比如預設延遲時間,和hover事件處理函式。
(4).var sets = $.extend(defaults, options || {}),和並自定義引數物件和預設物件,也就是說如果規定了自定義的引數則使用自定義的引數,否則使用預設引數。
(5).var hoverTimer, outTimer,宣告兩個變數,後面會用到。
(6).return $(this).each(function () {
$(this).hover(function () {
clearTimeout(hoverTimer);
var _this = this;
hoverTimer = setTimeout(sets.hoverEvent, sets.hoverDuring,_this);
});
}),前面加個return是為了實現鏈式呼叫。
$(this).each(function () {}),遍歷每一個匹配的元素。
並且為每一個匹配元祖註冊hover事件處理函式。
clearTimeout(hoverTimer)目的是為了停止前一將要執行的事件處理函式,這樣的話不會不出現當我們連續滑過多個選項卡,會依次執行的情況,只會執行最後一個選項卡的切換。
(7).var _this = this,將當前this指向賦值給變數_this。
(8).hoverTimer = setTimeout(sets.hoverEvent, sets.hoverDuring,_this),延遲執行事件處理函式。
(9).var done=function (_this) {
$('.tabs div').hide();
$(_this)
.siblings('span')
.removeClass('active')
.end()
.addClass('active')
.next('div')
.show();
},事件處理函式,裡面是非常簡單的處理。
二.相關閱讀:
(1).$.fn可以參閱$.fn作用簡單介紹一章節。
(2).$.extend()可以參閱jQuery.extend()一章節。
(3).each()可以參閱jQuery each()一章節。
(4).hover()可以參閱jQuery hover事件一章節。
(5).clearTimeout()可以參閱clearTimeout()一章節。
(6).setTimeout()函式可以參閱setTimeout()一章節。
(7).siblings()可以參閱jQuery siblings()一章節。
(8).removeClass()可以參閱jQuery removeClass()一章節。
(9).end()可以參閱jQuery end()一章節。
(10).next()可以參閱jQuery next()一章節。
相關文章
- js批量註冊事件處理函式程式碼例項JS事件函式
- javascript批量註冊事件處理函式程式碼例項JavaScript事件函式
- MySQL資料庫的事務處理用法與例項程式碼詳解MySql資料庫
- 使用for語句批量註冊事件處理函式程式碼例項事件函式
- jQuery:hover延時效果的一些處理jQuery
- PHP函式處理函式例項詳解PHP函式
- 資料處理等待效果例項程式碼
- 關於滑鼠hover事件及延時事件
- on()方法一次註冊多個事件處理函式程式碼例項事件函式
- 【Mysql】mysql事務處理用法與例項詳解MySql
- 常見路由器故障處理例項詳解路由器
- JavaScript之事件處理詳解JavaScript事件
- jQuery事件冒泡程式碼例項jQuery事件
- jQuery如何處理xml檔案程式碼例項jQueryXML
- zookeeper之watch事件延遲事件
- js監聽鍵盤事件程式碼例項例項JS事件
- jQuery處理json格式資料程式碼例項jQueryJSON
- JavaScript 阻止事件冒泡程式碼例項JavaScript事件
- javascript鍵盤事件程式碼例項JavaScript事件
- js阻止事件冒泡例項程式碼JS事件
- jQuery阻止事件冒泡程式碼例項jQuery事件
- css取消滑鼠事件程式碼例項CSS事件
- 阻止jquery事件冒泡程式碼例項jQuery事件
- javascript事件委託程式碼例項JavaScript事件
- jQuery阻止事件冒泡例項程式碼jQuery事件
- MySQL 最佳實踐: RDS 只讀例項延遲分析MySql
- Mybatis【20】-- Mybatis延遲載入怎麼處理?MyBatis
- 【精益生產】如何處理決策延遲?
- Kafka中消費者延遲處理訊息Kafka
- jquery星級評分程式碼例項詳解jQuery
- 原生ajax處理json格式資料程式碼例項JSON
- 幾種常見的延遲執行處理方式
- MySQL主從複製延遲原因及處理思路MySql
- oracle延遲事務無法自動推入處理Oracle
- js動態新增一個按鈕並且註冊事件處理函式程式碼例項JS事件函式
- MySQL 序列 AUTO_INCREMENT詳解及例項程式碼MySqlREM
- javascript元素滑鼠跟隨效果程式碼例項詳解JavaScript
- jquery淡入淡出無延遲程式碼jQuery