×î½üÔÚ×ö
chrome ²å¼þ¿ª·¢£¬¼ÈÈ»ÊDzå¼þÄǾÍÄÑÃâ²»¶ÔÏÖÓÐÒ³Ãæ×öһЩ¿ØÖÆ£¬±ÈÈçʼþ¼àÌý¡¢µ÷Õû²¼¾Ö¡¢¶Ô DOM
ÔªËØµÄÔöɾ¸Ä²éµÈµÈ¡£ÆäÖÐÓÐÒ»¸öÐèÇó±È½ÏÓÐÒâ˼£¬±ãÕûÀíÒ»ÏÂ˳±ã°ÑÉæ¼°µ½µÄ֪ʶµã¸´Ï°Ò»±é¡£
ÐèÇóÊÇÕâÑùµÄ£ºÔÚÒ»¸ö°üº¬ÀÁ¼ÓÔØ×ÊÔ´ÒÔ¼°¶¯Ì¬ DOM ÔªËØÉú³ÉµÄÒ³ÃæÖУ¬ÐèÒªÕë¶ÔÒ³ÃæÖдæÔÚµÄÔªËØÌí¼ÓÊôÐÔÏÔʾ±êÇ©¡£
´Ó DOM ±ä¶¯Ê¼þ¼àÌý˵Æð
Ê×ÏȼÙÉè´ó¼ÒÒѾ֪µÀ JavaScript ÖÐʼþµÄ·¢Éú½×¶Î(²¶»ñ-ÃüÖÐ-ðÅÝ)£¬¸½ÉÏÒ»ÕÅͼ´ø¹ýÕâ¸öÄÚÈÝ£¬ÎÒÃÇÖ±½Ó½øÈëѰÕÒ½â¾ö·½·¨µÄ¹ý³Ì¡£

Graphical
representation of an event dispatched in a DOM
tree using the DOM event flow |
¿ªÊ¼µÄʱºòÎÒÒ»Ö±ÔÚ window ״̬¸Ä±äÉæ¼°µ½µÄʼþÖÐѰÕÒ£¬Ò»È¦ËÑѰÏÂÀ´·¢ÏÖÒ²¾Í
onload ʼþ×î½Ó½üÁË£¬ËùÒÔÎÒÃÇ¿´¿´ MDN ¶Ô¸ÃʼþµÄ¶¨Ò壺
The
load event is fired when a resource and its
dependent resources have finished loading. |
ÔõôÀí½â×ÊÔ´¼°ÆäÒÀÀµ×ÊÔ´ÒѼÓÔØÍê±ÏÄØ?¼òµ¥À´Ëµ£¬Èç¹ûÒ»¸öÒ³ÃæÉæ¼°µ½Í¼Æ¬×ÊÔ´£¬ÄÇô onload ʼþ»áÔÚÒ³ÃæÍêÈ«ÔØÈë(°üÀ¨Í¼Æ¬¡¢cssÎļþµÈµÈ)ºó´¥·¢¡£Ò»¸ö¼òµ¥µÄ¼àÌýʼþÓÃ
JavaScript Ó¦¸ÃÕâÑùÊéд(×¢Òⲻͬ»·¾³Ï load ºÍ onload µÄ²îÒì)£º
v
µ±È»£¬Ëµµ½ onload ʼþ£¬ÓÐÒ»¸ö jQuery ÖÐÏàËÆµÄʼþÒ»¶¨»á±»Ìá¼°¡ª¡ª ready ʼþ¡£jQuery
ÖÐÕâÑù¶¨ÒåÕâ¸öʼþ£º
<script>
window.addEventListener("load", function(event)
{
console.log("All resources finished loading!");
});
// or
window.onload=function(){
console.log("All resources finished loading!");
};
// HTML
< body onload="SomeJavaScriptCode">
// jQuery
$( window ).on( "load", handler )
</script> |
ÐèÒªÖªµÀµÄÊÇ jQuery ¶¨ÒåµÄ ready ʼþʵÖÊÉÏÊÇΪ DOMContentLoaded ʼþÉè¼ÆµÄ£¬ËùÒÔµ±ÎÒÃÇ̸ÂÛ¼ÓÔØÊ±Ó¦¸ÃÇø·ÖµÄʼþÆäʵÊÇ
onload(½Ó¿Ú UIEvent) ÒÔ¼° DOMContentLoaded(½Ó¿Ú Event)£¬MDN
ÕâÑùÃèÊö DOMContentLoaded£º
µ±³õʼHTMLÎĵµ±»ÍêÈ«¼ÓÔØºÍ½âÎöʱ£¬DOMContentLoaded ʼþ±»´¥·¢£¬¶øÎÞÐèµÈ´ýÑùʽ±í¡¢Í¼ÏñºÍ×Ó¿ò¼ÜÍê³É¼ÓÔØ¡£ÁíÒ»¸ö²»Í¬µÄʼþ
load Ó¦¸Ã½öÓÃÓÚ¼ì²âÒ»¸öÍêÈ«¼ÓÔØµÄÒ³Ãæ¡£
ËùÒÔ¿ÉÒÔÖªµÀ£¬µ±Ò»¸öÒ³Ãæ¼ÓÔØÊ±Ó¦ÏÈ´¥·¢ DOMContentLoaded È»ºó²ÅÊÇ onload.
ÀàËÆµÄʼþ¼°Çø±ð°üÀ¨ÒÔϼ¸Àࣺ
1.DOMContentLoaded: µ±³õʼHTMLÎĵµ±»ÍêÈ«¼ÓÔØºÍ½âÎöʱ£¬DOMContentLoaded
ʼþ±»´¥·¢£¬¶øÎÞÐèµÈ´ýÑùʽ±í¡¢Í¼ÏñºÍ×Ó¿ò¼ÜÍê³É¼ÓÔØ;
2.readystatechange: Ò»¸ödocument µÄ
Document.readyState ÊôÐÔÃèÊöÁËÎĵµµÄ¼ÓÔØ×´Ì¬£¬µ±Õâ¸ö״̬·¢ÉúÁ˱仯£¬¾Í»á´¥·¢¸Ãʼþ;
3.load: µ±Ò»¸ö×ÊÔ´¼°ÆäÒÀÀµ×ÊÔ´ÒÑÍê³É¼ÓÔØÊ±£¬½«´¥·¢loadʼþ;
4.beforeunload: µ±ä¯ÀÀÆ÷´°¿Ú£¬Îĵµ»òÆä×ÊÔ´½«ÒªÐ¶ÔØÊ±£¬»á´¥·¢beforeunloadʼþ¡£
5.unload: µ±Îĵµ»òÒ»¸ö×Ó×ÊÔ´ÕýÔÚ±»Ð¶ÔØÊ±, ´¥·¢ unloadʼþ¡£
ϸÐĵã»á·¢ÏÖÉÏÃæÔÚ½éÉÜʼþʱÌáµ½ÁË UIEvent ÒÔ¼° Event£¬ÕâÊÇÊ²Ã´ÄØ?ÕâЩ¶¼ÊÇʼþ¡ª¡ª¿ÉÒÔ±»
JavaScript Õì²âµ½µÄÐÐΪ¡£ÆäËûµÄʼþ½Ó¿Ú»¹°üÀ¨ KeyboardEvent / VRDisplayEvent
(Êǵģ¬Ã»´í£¬Õâ¾ÍÊÇÄã¸ÐÐËȤÇÒÊìÖªµÄÄǸö VR)µÈµÈ;Èç¹ûÔÚËÑË÷ÒýÇæÖÐÉÔ¼ÓËÑË÷£¬Äã»á·¢ÏÖÓÐЩ×ÊÁÏÀïдµ½Ê¼þ¿ÉÒÔ·ÖΪÒÔϼ¸Àࣺ
1.UIʼþ
2.½¹µãʼþ
3.Êó±êÓë¹öÂÖʼþ
4.¼üÅÌÓëÎı¾Ê¼þ
5.¸´ºÏʼþ
6.±ä¶¯Ê¼þ
7.HTML5 ʼþ
8.É豸ʼþ
9.´¥ÃþÓëÊÖÊÆÊ¼þ
µ«ÕâÑùдʵÔÚÓÐЩÁèÂÒ£¬ÆäÖÐһЩÊÇ DOM3 ¶¨ÒåµÄʼþ£¬ÓÐһЩÊǵ¥¶ÀÁгöµÄʼþ£¬Èç¹ûÄã¾õµÃÊìϤÄÇôÄã»á·¢ÏÖÕâÊÇ
JavaScript ¸ß¼¶³ÌÐòÉè¼ÆÀïµÄÐðÊöģʽ£¬ÔÚÎÒ¿´À´£¬Àí½âÕâЩʼþ¿ÉÒÔ°´ÕÕ DOM3 ʼþÒÔ¼°ÆäËûʼþÀ´×öÇø·Ö£ºÆäÖУ¬DOM3
¼¶Ê¼þ¹æ¶¨ÁËÒÔϼ¸Ààʼþ ¨C UI ʼþ, ½¹µãʼþ, Êó±êʼþ, ¹öÂÖʼþ, Îı¾Ê¼þ, ¼üÅÌʼþ,
ºÏ³Éʼþ, ±ä¶¯Ê¼þ, ±ä¶¯Ãû³ÆÊ¼þ; ¶øÊ£ÏµÄÀýÈç HTML5 ʼþ¿ÉÒÔµ¥¶À×öÁ˽⡣¶ø¸Õ¿ªÊ¼Ìáµ½µÄ
Event ×÷Ϊһ¸öÖ÷Òª½Ó¿Ú£¬ÊǺܶàʼþµÄʵÏÖ¸¸Àà¡£ÓÐ¹Ø Web API ½Ó¿Ú¿ÉÒÔÔÚÕâÀï²éµ½£¬ÀïÃæ¿ÉÒÔ¿´µ½Óкܶà
Event ×ÖÑÛ¡£
ºÃ°É£¬Ê¼þ˵ÁËÕâô¶à£¬ÎÒÃÇ»¹ÊÇûÓнâ¾ö¸Õ¿ªÊ¼Ìá³öµÄÎÊÌ⣬Èç¹û¼àÌýÒ³ÃæÖж¯Ì¬Éú³ÉµÄÔªËØÄØ?Ïëµ½¶¯Ì¬Éú³ÉµÄÔªËØ¶¼ÊÇÐèҪͨ¹ýÍøÂçÇëÇó»ñÈ¡×ÊÔ´µÄ£¬ÄÇôÊÇ·ñ¿ÉÒÔ¼àÌýËùÓÐ
HTTP ÇëÇóÄØ?²é¿´ jQuery Îĵµ¿ÉÒÔÖªµÀÿµ±Ò»¸öAjaxÇëÇóÍê³É£¬jQuery ¾Í»á´¥·¢
ajaxComplete ʼþ£¬ÔÚÕâ¸öʱ¼äµãËùÓд¦Àíº¯Êý»áʹÓà .ajaxComplete() ·½·¨×¢²á²¢Ö´ÐС£µ«ÊÇËÄܱ£Ö¤ËùÓÐ
ajax ¶¼´Ó jQuery ×ßÄØ?ËùÒÔÓ¦¸ÃÔڱ䶯ʼþÖÐ×ö³öÑ¡Ôñ£¬ÎÒÃÇÀ´¿´¿´ DOM2 ¶¨ÒåµÄÈçϱ䶯ʼþ£º
1.DOMSubtreeModified: ÔÚDOM½á¹¹·¢ÉúÈκα仯µÄʱºò¡£Õâ¸öʼþÔÚÆäËûʼþ´¥·¢ºó¶¼»á´¥·¢;
2.DOMNodeInserted: µ±Ò»¸ö½Úµã×÷Ϊ×ӽڵ㱻²åÈëµ½ÁíÒ»¸ö½ÚµãÖÐʱ´¥·¢;
3.DOMNodeRemoved: ÔÚ½Úµã´ÓÆä¸¸½ÚµãÖÐÒÆ³ýʱ´¥·¢;
4.DOMNodeInsertedIntoDocument: ÔÚÒ»¸ö½Úµã±»Ö±½Ó²åÈëÎĵµ»òͨ¹ý×ÓÊ÷¼ä½Ó²åÈëÎĵµÖ®ºó´¥·¢¡£Õâ¸öʼþÔÚ
DOMNodeInserted Ö®ºó´¥·¢;
5.DOMNodeRemovedFromDocument: ÔÚÒ»¸ö½Úµã±»Ö±½Ó´ÓÎĵµÒƳý»òͨ¹ý×ÓÊ÷¼ä½Ó´ÓÎĵµÒƳý֮ǰ´¥·¢¡£Õâ¸öʼþÔÚ
DOMNodeRemoved Ö®ºó´¥·¢;
6.DOMAttrModified: ÔÚÌØÐÔ±»ÐÞ¸ÄÖ®ºó´¥·¢;
7.DOMCharacterDataModified: ÔÚÎı¾½ÚµãµÄÖµ·¢Éú±ä»¯Ê±´¥·¢;
ËùÒÔ£¬Óà DOMSubtreeModified ºÃÏñû´í¡£Ê¦ÐÖÅÔ±ßÌáÐÑ£¬Óà MutationObserver,
ÓÚÊÇÓÖËѵ½ÁËÒ»¸öд󽡣MDN ÕâÑùÃèÊö MutationObserver£º
MutationObserver¸ø¿ª·¢ÕßÃÇÌṩÁËÒ»ÖÖÄÜÔÚij¸ö·¶Î§ÄÚµÄDOMÊ÷·¢Éú±ä»¯Ê±×÷³öÊʵ±·´Ó¦µÄÄÜÁ¦.¸ÃAPIÉè¼ÆÓÃÀ´Ìæ»»µôÔÚDOM3ʼþ¹æ·¶ÖÐÒýÈëµÄMutationʼþ.
DOM3 ʼþ¹æ·¶ÖÐµÄ Mutation ʼþ¿ÉÒÔ±»¼òµ¥¿´³ÉÊÇ DOM2 ʼþ¹æ·¶Öж¨ÒåµÄ Mutation
ʼþµÄÒ»¸öÀ©Õ¹£¬µ«ÊÇÕâЩ¶¼²»ÖØÒªÁË£¬ÒòΪËûÃǶ¼Òª±» MutationObserver Ìæ´úÁË¡£ºÃÁË£¬ÄÇôÀ´Ïêϸ½éÉÜÒ»ÏÂ
MutationObserver °É¡£ÎÄÕ¡¶Mutation Observer API¡·¶Ô MutationObserver
µÄÓ÷¨½éÉܵıȽÏÏêϸ£¬ËùÒÔÎÒÌô¼¸µãÄÜÖ±½Ó½â¾öÎÒÃÇÐèÇóµÄ˵һ˵¡£
¼ÈȻҪ¼àÌý DOM µÄ±ä»¯£¬ÎÒÃÇÀ´¿´¿´ Observer µÄ×÷Óö¼ÓÐÄÄЩ£º
ËüµÈ´ýËùÓнű¾ÈÎÎñÍê³Éºó£¬²Å»áÔËÐУ¬¼´²ÉÓÃÒì²½·½Ê½¡£
Ëü°Ñ DOM ±ä¶¯¼Ç¼·â×°³ÉÒ»¸öÊý×é½øÐд¦Àí£¬¶ø²»ÊÇÒ»ÌõÌõµØ¸ö±ð´¦Àí DOM ±ä¶¯¡£
Ëü¼È¿ÉÒԹ۲췢ÉúÔÚ DOM µÄËùÓÐÀàÐͱ䶯£¬Ò²¿ÉÒÔ¹Û²ìijһÀà±ä¶¯¡£
MutationObserver µÄ¹¹Ô캯Êý±È½Ï¼òµ¥£¬´«ÈëÒ»¸ö»Øµ÷º¯Êý¼´¿É(»Øµ÷º¯Êý½ÓÊÜÁ½¸ö²ÎÊý£¬µÚÒ»¸öÊDZ䶯Êý×飬µÚ¶þ¸öÊǹ۲ìÆ÷ʵÀý)£º
let
observer = new MutationObserver(callback); |
¹Û²ìÆ÷ʵÀýʹÓà observe ·½·¨À´¼àÌý£¬ disconnect ·½·¨Í£Ö¹¼àÌý£¬takeRecords
·½·¨À´Çå³ý±ä¶¯¼Ç¼¡£
let
article = document.body;
let options = {
'childList': true,
'attributes':true
} ;
observer.observe(article, options); |
observe ·½·¨ÖеÚÒ»¸ö²ÎÊýÊÇËùÒª¹Û²ìµÄ±ä¶¯ DOM ÔªËØ£¬µÚ¶þ¸ö²ÎÊýÔò½ÓÊÕËùÒª¹Û²ìµÄ±ä¶¯ÀàÐÍ(×Ó½Úµã±ä¶¯ºÍÊôÐԱ䶯)¡£±ä¶¯ÀàÐͰüÀ¨ÒÔϼ¸ÖÖ£º
childList£º×Ó½ÚµãµÄ±ä¶¯¡£
attributes£ºÊôÐԵı䶯¡£
characterData£º½ÚµãÄÚÈÝ»ò½ÚµãÎı¾µÄ±ä¶¯¡£
subtree£ºËùÓкó´ú½ÚµãµÄ±ä¶¯¡£
ÏëÒª¹Û²ìÄÄÒ»Öֱ䶯ÀàÐÍ£¬¾ÍÔÚ option ¶ÔÏóÖÐÖ¸¶¨ËüµÄֵΪ true¡£ÐèҪעÒâµÄÊÇ£¬Èç¹ûÉèÖù۲ì
subtree µÄ±ä¶¯£¬±ØÐëͬʱָ¶¨ childList¡¢attributes ºÍ characterData
ÖеÄÒ»ÖÖ»ò¶àÖÖ¡£disconnect ·½·¨ºÍ takeRecords ·½·¨ÔòÖ±½Óµ÷Óü´¿É£¬ÎÞ´«Èë²ÎÊý¡£
ºÃµÄ£¬ÎÒÃÇÒѾ¸ã¶¨ÁË DOM ±ä¶¯µÄ¼àÌý£¬½«´úÂëË¢ÐÂһϿ´ÏÂЧ¹û°É£¬ÒòÎªÒ³ÃæÓɺܶද̬Éú³ÉµÄÉÌÆ·×é³É£¬ÄÇôÎÒÓ¦¸ÃÔÚ
body ÉÏÌí¼Ó±ä¶¯¼àÌý£¬ËùÒÔ options Ó¦¸ÃÕâÑùÉèÖãº
var
options = {
'attributes': true,
'subtree': true
} |
ß×?Ò³ÃæÍùÏÂÀһСµã¾Í´¥·¢ÁË observer ¼¸Ê®´Î?ÕâÑù DOM ÄijԵÃÏû°¡£¬²é¿´ÁËÒ³ÃæµÄ±ä¶¯¼Ç¼·¢ÏÖÿ´ÎнøµÄ×ÊÔ´µ×²ã¶¼µ÷ÓÃÁË
Node.insertBefore() ·½·¨¡
ÔÙÁÄÁÄ JavaScript ÖеĽØÁ÷/½ÚÁ÷º¯Êý
ÏÖÔÚÓöµ½µÄÒ»¸öÂé·³ÊÇ£¬ DOM ±ä¶¯Ì«Æµ·±ÁË£¬Èç¹ûÿ´Î±ä¶¯¶¼¼àÌýÄÇÕæÊÇÌ«ºÄ·Ñ×ÊÔ´ÁË¡£Ò»¸ö¼òµ¥µÄ½â¾ö°ì·¨ÊÇÎÒ¾Í·ÅÆú¼àÌýÁË£¬¶ø²ÉÓÃ
setInterval ·½·¨¶¨Ê±Ö´ÐиüÐÂÂß¼¡£Êǵģ¬ËäÈ»·½·¨ÔʼÁËÒ»µã£¬µ«ÊÇÐÔÄÜÉÏ±È Observer
¡°¸Ä½ø¡±Á˲»ÉÙ¡£
Õâ¸öʱºò£¬ÓÖÀ´ÁËʦÐÖµÄÖú¹¥£º¡°ÓÃÓýØÁ÷º¯Êý¡±¡£¼ÇÆð֮ǰ¿´¡¶JavaScript ÓïÑÔ¾«´â¡·µÄʱºò¿´µ½ÊÇÓÃ
setTimeout ·½·¨×Ôµ÷ÓÃÀ´½â¾ö setInteval µÄƵ·±Ö´ÐгÔ×ÊÔ´µÄÏÖÏ󣬲»ÖªµÀÁ½ÕßÊDz»ÊÇÓйØÁª¡£ÍøÉÏÒ»²é·¢ÏÖÓÐÁ½¸ö¡°jieÁ÷º¯Êý¡±¡£ÐèÇóÀ´×ÔÓÚÕâÀ
ÔÚǰ¶Ë¿ª·¢ÖУ¬Ò³ÃæÓÐʱ»á°ó¶¨scroll»òresizeʼþµÈƵ·±´¥·¢µÄʼþ£¬Ò²¾ÍÒâζ×ÅÔÚÕý³£µÄ²Ù×÷Ö®ÄÚ£¬»á¶à´Îµ÷Óð󶨵ijÌÐò£¬È»¶øÓÐЩʱºòjavascriptÐèÒª´¦ÀíµÄÊÂÇéÌØ±ð¶à£¬Æµ·±³ö·¢¾Í»áµ¼ÖÂÐÔÄÜϽµ¡¢³ÉÒ³Ãæ¿¨¶ÙÉõÖÁÊÇä¯ÀÀÆ÷±¼À£¡£
Èç¹ûÖØ¸´ÀûÓà setTimeout ºÍ clearTimeout ·½·¨£¬ÎÒÃǺÃÏñ¿ÉÒÔ½â¾öÕâ¸öƵ·±´¥·¢µÄÖ´ÐС£Ã¿´Îʼþ´¥·¢µÄʱºòÎÒÊ×ÏÈÅжÏһϵ±Ç°ÓÐûÓÐÒ»¸ö
setTimeout ¶¨Ê±Æ÷£¬Èç¹ûÓеϰÎÒÃÇÏȽ«ËüÇå³ý£¬È»ºóÔÙн¨Ò»¸ö setTimeout ¶¨Ê±Æ÷À´ÑÓ³ÙÎÒµÄÏìÓ¦ÐÐΪ¡£ÕâÑùÌýÉÏÈ¥»¹²»´í£¬ÒòΪÎÒÃÇÿ´Î¶¼²»Á¢¼´Ö´ÐÐÎÒÃǵÄÏìÓ¦£¬¶øÆµ·±´¥·¢¹ý³ÌÎÒÃÇÓÖÄܱ£³ÖÏìÓ¦º¯ÊýÒ»Ö±´æÔÚ(ÇÒÖ»´æÔÚÒ»¸ö)£¬³ýÁË»áÓÐЩÑÓ³ÙÏìÓ¦Í⣬ûʲô²»ºÃµÄ¡£ÊǵÄÕâ¾ÍÊǽØÁ÷º¯Êý(debounce)£¬ÓÐһƪ²©¿ÍÓÃÕâ¸öС¹ÊʽéÉÜËü£º
ÐÎÏñµÄ±ÈÓ÷ÊÇÏðƤÇò¡£Èç¹ûÊÖÖ¸°´×¡ÏðƤÇò²»·Å£¬Ëü¾ÍÒ»Ö±ÊÜÁ¦£¬²»ÄÜ·´µ¯ÆðÀ´£¬Ö±µ½ËÉÊÖ¡£debounce
µÄ¹Ø×¢µãÊÇ¿ÕÏеļä¸ôʱ¼ä¡£
ÔÚÎÒµÄÒµÎñÖУ¬ÔÚ observer ʵÀýÖе÷ÓÃÏÂÃæÐ´µÄÕâ¸ö½ØÁ÷º¯Êý¾Í¿ÉÒÔÀ²
/**
* fn Ö´Ðк¯Êý
* context °ó¶¨ÉÏÏÂÎÄ
* timeout ÑÓʱÊýÖµ
**/
let debounce = function(fn, context, timeout)
{
let timer;
// ÀûÓñհü½«ÄÚÈÝ´«µÝ³öÈ¥
return function() {
if (timer) {
// Çå³ý¶¨Ê±Æ÷
clearTimeout(timer);
}
// ÉèÖÃÒ»¸öÐµĶ¨Ê±Æ÷
timer = setTimeout(function(){
fn.apply(context, arguments)
}, timeout);
}
} |
µ±È»£¬½â¾öÁË×Ô¼ºµÄÎÊÌ⣬µ«»¹ÓÐÒ»¸ö¸ÅÄîûÓÐ˵µ½¡ª¡ª¡°½ÚÁ÷º¯Êý¡±¡£Í¬Ò»Æª²©ÎÄÀïҲʹÓÃÁËÒ»¸öÀý×ÓÀ´ËµÃ÷Ëü£º
ÐÎÏñµÄ±ÈÓ÷ÊÇË®ÁúÍ·»ò»úǹ£¬Äã¿ÉÒÔ¿ØÖÆËüµÄÁ÷Á¿»òƵÂÊ¡£throttle µÄ¹Ø×¢µãÊÇÁ¬ÐøµÄÖ´Ðмä¸ôʱ¼ä¡£
º¯Êý½ÚÁ÷µÄÔÀíҲͦ¼òµ¥£¬Ò»Ñù»¹ÊǶ¨Ê±Æ÷¡£µ±ÎÒ´¥·¢Ò»¸öʱ¼äʱ£¬ÏÈsetTimoutÈÃÕâ¸öʼþÑÓ³ÙÒ»»áÔÙÖ´ÐУ¬Èç¹ûÔÚÕâ¸öʱ¼ä¼ä¸ôÄÚÓÖ´¥·¢ÁËʼþ£¬ÄÇÎÒÃǾÍÇå³ýÔÀ´µÄ¶¨Ê±Æ÷£¬ÔÙsetTimeoutÒ»¸öÐµĶ¨Ê±Æ÷ÑÓ³ÙÒ»»áÖ´ÐС£º¯Êý½ÚÁ÷µÄ³ö·¢µã£¬¾ÍÊÇÈÃÒ»¸öº¯Êý²»ÒªÖ´ÐеÃ̫Ƶ·±£¬¼õÉÙһЩ¹ý¿ìµÄµ÷ÓÃÀ´½ÚÁ÷¡£ÕâÀïÓÃ
AlloyTeam µÄ½ÚÁ÷´úÂëʵÏÖÀ´½âÊÍ£º
//
²ÎÊýͬÉÏ
var throttle = function(fn, delay, mustRunDelay){
var timer = null;
var t_start;
return function(){
var context = this, args = arguments, t_curr
= +new Date();
// Çå³ý¶¨Ê±Æ÷
clearTimeout(timer);
// º¯Êý³õʼ»¯ÅжÏ
if(!t_start){
t_start = t_curr;
}
// ³¬Ê±£¨Ö¸¶¨µÄʱ¼ä¼ä¸ô£©ÅжÏ
if(t_curr - t_start >= mustRunDelay){
fn.apply(context, args);
t_start = t_curr;
}
else {
timer = setTimeout(function(){
fn.apply(context, args);
}, delay);
}
};
}; |
µ±È»£¬AlloyTeam ÄÇÆªÎÄÕ½«ÕâÀïËù˵µÄ½ØÁ÷º¯Êý×÷Ϊ½ÚÁ÷º¯ÊýµÄ V1.0 °æ±¾£¬ÄãÒ²¿ÉÒÔÕâÑùÈÏΪ¡£±Ï¾¹£¬ÉèÖÃÁ˱ØÈ»´¥·¢Ö´ÐеÄʱ¼ä¼ä¸ô(¼´
mustRunDelay º¯Êý)£¬¿ÉÒÔʹµÃ½ØÁ÷º¯Êý²»»áÔÚ¡°·è¿ñʼþ¡±Çé¿öÏÂÎÞÖ¹¾³µÄÑ»·ÏÂÈ¥¡£ |