Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÈçºÎ¼àÌýÒ³Ãæ DOM ±ä¶¯²¢¸ßЧÏìÓ¦
 
À´Ô´£º 51CTO ·¢²¼ÓÚ2017-8-21
  3952  次浏览      28
 

×î½üÔÚ×ö 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 º¯Êý)£¬¿ÉÒÔʹµÃ½ØÁ÷º¯Êý²»»áÔÚ¡°·è¿ñʼþ¡±Çé¿öÏÂÎÞÖ¹¾³µÄÑ­»·ÏÂÈ¥¡£

   
3952 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì