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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÄãÈô´¥·¢£¬ÎҾʹ¦Àí¡ª¡ªÇ³Ì¸JavaScriptµÄʼþÏìÓ¦
 
À´Ô´£ºChristian Heilmann ·¢²¼ÓÚ 2015-03-23
  2603  次浏览      27
 

ÿµ±ºï×ÓÃÇÎÊÎÒJavaScriptºÍDOMÀïɶ¶«Î÷×îÅ£±ÆÊ±£¬ÎÒ¶¼»áÒ»°ÍÕÆ´ò»ØÈ¥£ºÎÔ²Û»¹ÓÃÎÊôµ±È»ÊÇʼþÏìÓ¦Á˰¡£¡Ã»ËüÄãÄÜÓÐʱ¼äºÍÎÒÌÖÂÛÕâ¸ö£¿ÄãÔçÈ¥¹¤µØ°áשȥÁ˺Ãô£¡ä¯ÀÀÆ÷ûÓÐʼþÏìÓ¦¾ÍûÓÐÐÐΪ½»»¥£¬ÄǼòÖ±¾ÍÊÇÒ»Ò¹»Øµ½½â·ÅǰµÄ¸Ð¾õ°¡¡£´ËÍ⣬ÒÔʼþÇý¶¯Ê¹µÃ¹¦ÄܽâñîÒ²ÊǸöÏ൱¸ß¶Ë´óÆøµÄ¼¼ÇÉÁË£¬ÂÒÔ´ËΪÖ÷µÄNode.js ÏÖÔÚ¿ÉÊÇ·çÉúË®ÆðµÄ˵¡£

ÄÇÏÖÔÚÎÒÃǾÍÔٿٿÙʼþ¼àÌýµÄÏà¹Ø»ù´¡£¬Èôó¼ÒÔÚÐÄÇéÓäÔõÄ״̬Ï»ñµÃ¸ü¶àµÄ×Ë¡áÊÆ¡£²»¹ýÄÇЩ¾­³£Ð´<a href=¡±javascript:void(0)¡±>ºÍÔÚ±êÇ©ÉÏдonclick=¡±foo()¡±µÄºï×ÓÃÇÇë×Ô¶¯»Ø±Ü£¬Ð¡ÐÄÄã¿´²»¶®ÓÖÏë²»¿ª£¬ÀÏñÄͽÔö×ïÄõѽ£¨Å¼°ËÄêǰ¾Í½âÊÍÁËÄÚÁªÊ¼þ´¦ÀíÊÇ×ÔѰËÀ·£©¡£

ÔÙßëß¶Á½¾ä£º±¾ÎĵĴúÂëÄÚÈÝֻɿ¼°µ½Ô­ÉúJavaScript£¬ÏñJQuery£¬YUI»òDojoʲôµÄËùÌṩµÄʼþ´¦ÀíÕâÀï¾Í²»¼ÓÒÔ׸ÊöÁË¡£ÎÒÏ£Íû´ó¼ÒÄܹ»Ã÷°×£¬Ê¹ÓÃÕâЩ¿âÖ»ÊÇΪÁË·½±ã£¬µ«ÎÒÃÇÈ´²»ÄÜÍêÈ«ÒÀÀµËü¡£Á˽â»ù´¡ÓëÀí½â±¾ÖÊÊǷdz£ÖØÒªµÄ£¬ÕâÑùÄã¾Í¿ÉÒÔÔÚ²»ÄÜʹÓÃɵ¹Ï¿âµÄÇé¿öÏ£¬ÒÀ¾É¿ÉÒÔÌṩһ¸öÅ£±ÆµÄ½â¾ö·½°¸¡£

½ø»¯Ö÷ÒåÉùÃ÷£ºÕâÀïÎÒÃÇʹÓõÄʼþÓï·¨ÊÇ¡°DOM Level 3 Events¡±¹æ·¶¶¨ÒåµÄ¡°addEventListener()¡£³ýÁËIE9ÒÔϰ汾ÒÔÍâµÄÏÖ´úä¯ÀÀÆ÷¶¼Ö§³Ö¡£µ±È»£¬ÎÒÃÇ¿ÉÒÔʹÓÃJQuery£¬Ëü»á°ïÎÒ½â¾öÕâЩä¯ÀÀÆ÷¼æÈÝÐÔµÄÎÊÌâ¡£µ«Èç¹ûÄ㻹ÏëÈû¥ÁªÍø¿ÉÒÔÁ¼ºÃ·¢Õ¹ºÍ½ø»¯£¬Äã¾ÍÓ¦¸ÃÁ¢¿ÌֹͣΪ¼æÈݵͼ¶ä¯ÀÀÆ÷¶øÔÙȥдһÛçʺһÑùµÄɵ±Æ¼æÈÝ´úÂë¡£ÕâÌõ·ËäÈ»¼èÐÁ£¬µ«È´ÎÞ±ÈÕýÈ·¡£¿ÉÒÔÊÔןøÄãµÄ²úÆ·½øÐй¦Äܽµ¼¶£¬¼ì²âµ½Êǵͼ¶ä¯ÀÀÆ÷¾Í²»Ö´Ðнű¾£¬±ÈÈçaddEventListener()µÄDOMContentLoadedʼþ¾ÍÄÜÈ·±£ÄãµÄ´úÂë²»Ôڵͼ¶ä¯ÀÀÆ÷ÖÐÔËÐУ¬¶øÒ³Ãæ¿ÉÒÔ½«Ö÷ÌåÄÚÈÝÕý³£ÏÔʾ¾ÍOKµÄ¡£

ÔÚÎÒÃǽøÈëʼþµÄϸ½Ú֮ǰÏÈ¿´¼¸¸öÅ£±ÆµÄÑÝʾ£¬ËüÀûÓÃonscrollʼþµÃµ½ÁËÒ»¸öºÜniceµÄЧ¹û£º

ÒòΪҪÕÐÉè¼ÆÊ¦£¬WealthfrontµÄ¹¤³ÌʦÃÇ¿ª·¢ÁËZÖá¹ö¶¯Æ½ÒÆÐ§¹û¡£ÕâÒ²ÊÇBeercamp 2011 websiteµÄÒ»²¿·Ö¡£WealthfrontµÄ²©¿ÍÓÐϸ½Ú½éÉÜ¡£

Stroll.jsÓõÄÒ²ÊÇÀàËÆµÄÊÖ·¨£¬Óû§¿ÉÒÔÔÚ¹ö¶¯Áбíʱ¿´µ½ºÜ¶àÖÖìÅ¿áÕ¹ÏÖ¡£

jQuery Scroll PathÊÇÒ»¸öJQ²å¼þ£¬ËüµÄ¹¦ÄÜÊǵ±Óû§ÔÚÒ³ÃæÄÚÄܹ»¸úËæ×ÅÒ»Ìõ·¾¶È¥¶¯Ì¬ä¯ÀÀÄÚÈÝ¡£

ÒÔÉÏËùÓж¼ÊÇ»ùÓÚä¯ÀÀÆ÷µÄʼþ¼àÌýºÍ´¦Àí¹¦ÄÜ£¬ËùÒÔ£¬ÈÃÎÒÃÇϸϸƷζһÏÂԭ֭ԭζµÄʼþ»úÖÆ°É¡£

»ù´¡ÎÊÌ⣺ɶÊÇʼþ£¿

var log = document.getElementById('log'),
i = '',
out = [];
for (i in window) {
if ( /^on/.test(i)) { out[out.length] = i; }
}
log.innerHTML = out.join(', ');

ÔÚä¯ÀÀÆ÷ÖÐÔËÐÐÈçÉÏ´úÂ룬Ç×ÃÇ¿ÉÒԵõ½ÈçÏ£º

onmouseenter, onmouseleave, onafterprint, onbeforeprint, onbeforeunload, onhashchange, 
onmessage, onoffline, ononline, onpopstate, onpagehide, onpageshow, onresize, onunload, 
ondevicemotion, ondeviceorientation, onabort, onblur, oncanplay, oncanplaythrough, onchange,
 onclick, oncontextmenu, ondblclick, ondrag, ondragend, ondragenter, ondragleave, ondragover,
 ondragstart, ondrop, ondurationchange, onemptied, onended, onerror, onfocus, oninput, oninvalid,
 onkeydown, onkeypress, onkeyup, onload, onloadeddata, onloadedmetadata, onloadstart, onmousedown,
 onmousemove, onmouseout, onmouseover, onmouseup, onmozfullscreenchange, onmozfullscreenerror, 
onpause, onplay, onplaying, onprogress, onratechange, onreset, onscroll, onseeked, onseeking, 
onselect, onshow, onstalled, onsubmit, onsuspend, ontimeupdate, onvolumechange, onwaiting, 
oncopy, oncut, onpaste, onbeforescriptexecute, onafterscriptexecute

Ò»´óÛçʼþ¾Í¹»Äã³Ô¼¸ÌìµÄÁË£¬ÓÃaddEventListener()·½·¨¿ÉÒÔ½øÐÐʼþ¼àÌý£º

element.addEventListener(event, handler, useCapture);

¾Ù¸öÀý×ÓÀ´Ëµ£º

var a = document.querySelector('a'); // grab the first link in the document
a.addEventListener('click', ajaxloader, false);

ÎÒÃÇÔÚÒ»¸öelementÉϼÓÁ˸öʼþ¼àÌý£¬¾ÍºÃÏñÊÇÔÚÃüÁîËý£¬¡°Äã±»¿ÍÈËÃþÁËÄã¾Í¸øÎÒº°ÆðÀ´£¡¡± The ajaxloader()ÊǼàÌýʼþµÄ»Øµ÷·½·¨£¬¾ÍºÃÏñÊÇ£¬¡°Äã¾ÍÔÚÕâ¶ù¸øÎÒ¶¢×Å£¬æ¤ÒªÊǺ°ÁË£¬Äã¾Í¹ýÈ¥¸ø¿ÍÈ˵ÀǸ£¡¡± ½«µÚÈý¸ö²ÎÊýuseCaptureÉèÖÃΪfalseÊÇΪÁ˱íʾÕâ´ÎÊÇÔÚʼþðÅݽ׶νøÐд¥·¢£¬¶ø²»ÊÇÔÚʼþ²¶»ñ½×¶Î¡£¿È¿È£¬ÕâÊÇÒ»¸öÂþ³¤¶ø¼è¾ÞµÄ¿ÎÌ⣬ÄãÒ²¿ÉÒÔ¿´¿´Dev.Opera¶ÔcaptureµÄ½âÊÍ¡£°¥Ñ½·´Õý²»ÓùÜÄÇô¶àÀ²£¬99.7434£¥µÄÇé¿öÏÂÉèÖÃuseCaptureΪfalse׼û´í£¡ÆäʵËüĬÈϾÍÊÇfalse£¬ËùÒÔ°´ÀíÀ´ËµÊÇ¿ÉÒÔ²»ÓÃÌîдµÄ£¬µ«OperaÕⶺ±ÈÀýÍâ¡­

ÔÚʼþ±»´¥·¢Ö®Ê±£¬»Øµ÷·½·¨»á½ÓÊÕµ½Ò»¸öʼþ¶ÔÏó¡£ÇëÊÔ×ÅÔÚÇ¡µ±µÄ»·¾³ÖÐÔËÐÐÈçÏ´úÂ룬Ҳ¿ÉÒÔÖ±½Óµã»÷ÕâÀï²âÊÔÕâ¸öÀý×Ó£¬¶ÔÏóÄÚµÄÊôÐÔÓÖ¹»³ÔÒ»ÅèµÄ£º

var log = document.getElementById('log'),
out = '';

document.addEventListener('click', logeventinfo, false);
document.addEventListener('keypress', logeventinfo, false);

function logeventinfo (ev) {
log.innerHTML = '';
out = '<ul>';
for (var i in ev) {
if (typeof ev[i] === 'function' || i === i.toUpperCase()) {
continue;
}
out += '<li><span>'+i+'</span>: '+ev[i]+'</li>';
}
log.innerHTML += out + '</ul>';
}

Äã¿ÉÒÔ¶Ôͬһʼþ½øÐжàÖØ¼àÌý£¬Ò²¿ÉÒÔ¶Ô¶à¸öʼþʹÓÃͬһ·½·¨´¦Àí£¨Èç±¾Àý£©¡£

²ÎÊýevÊÇ´«»ØÀ´µÄʼþ¶ÔÏó£¬ÏÂÃæÊÇËüËù´øµÄÈ«²¿ÊôÐÔ£º

originalTarget: [object HTMLHtmlElement]
type: click
target: [object HTMLHtmlElement]
currentTarget: [object HTMLDocument]
eventPhase: 3
bubbles: true
cancelable: true
timeStamp: 574553210
defaultPrevented: false
which: 1
rangeParent: [object Text]
rangeOffset: 23
pageX: 182
pageY: 111
isChar: false
screenX: 1016
screenY: 572
clientX: 182
clientY: 111
ctrlKey: false
shiftKey: false
altKey: false
metaKey: false
button: 0
relatedTarget: null
mozPressure: 0
mozInputSource: 1
view: [object Window]
detail: 1
layerX: 182
layerY: 111
cancelBubble: false
explicitOriginalTarget: [object HTMLHtmlElement]
isTrusted: true
originalTarget: [object HTMLHeadingElement]
type: click
target: [object HTMLHeadingElement]
currentTarget: [object HTMLDocument]
eventPhase: 3
bubbles: true
cancelable: true
timeStamp: 574554192
defaultPrevented: false
which: 1
rangeParent: [object Text]
rangeOffset: 0
pageX: 1
pageY: 18
isChar: false
screenX: 835
screenY: 479
clientX: 1
clientY: 18
ctrlKey: false
shiftKey: false
altKey: false
metaKey: false
button: 0
relatedTarget: null
mozPressure: 0
mozInputSource: 1
view: [object Window]
detail: 1
layerX: 1
layerY: 18
cancelBubble: false
explicitOriginalTarget: [object Text]
isTrusted: true

ÊÔһϱ¾ÀýÖеã»÷Êó±êºÍ°´¼üÅÌ£¬²»Í¬µÄʼþ´¥·¢´«»ØÀ´µÄ½á¹ûÊDz»Í¬µÄ¡£¿ÉÒÔ¿´¿´ÍêÕûµÄ±ê׼ʼþÊôÐÔÁÐ±í¡£

ÖªÏþ»ù´¡Ö®ºó£º×èֹʼþĬÈÏÐÐΪµÄÖ´ÐкͻñµÃ´¥·¢Ê¼þµÄÄ¿±êÔªËØ

ÎÒÃÇÐèÒªÁ˽âä¯ÀÀÆ÷ÖйØÓÚʼþ¶ÔÏóÓÐÁ½¸öºÜÖØÒªµÄ¹¦ÄÜ¡£×èÖ¹ä¯ÀÀÆ÷Ö´ÐÐʼþĬÈÏÐÐΪµÄev.preventDefault()£¬ºÍ¿ÉÒÔ»ñµÃʼþÄ¿±êÔªËØµÄev.target.

±ÈÈç˵һ¸öÁ´½Ó±»µã»÷ÁË£¬µ«ÒòΪҵÎñÐèÒª£¬ÎÒÃDz¢²»ÏëÈÃä¯ÀÀÆ÷´ò¿ªÐÂÒ³Ãæ¡£Õâʱºò¿ÉÒÔ¸øÕâ¸öÁ´½Ó¼Ó¸öµã»÷ʼþ¼àÌý£¬È»ºóÔڻص÷º¯ÊýÖе÷Óà preventDefault()·½·¨¼´¿É¡£°º£¬¾ÍÈçÏÂÃæÕâ¸öÀý×Ó£¬Çë¿´HTML£º

<a class="prevent" href="http://smashingmagazine.com">Smashing, my dear!</a>
<a class="normal" href="http://smashingmagazine.com">Smashing, my dear!</a>

»¹ÓÐJavaScript£º

var normal = document.querySelector('.normal'),
prevent = document.querySelector('.prevent');

prevent.addEventListener('click', function(ev) {
alert('fabulous, really!');
ev.preventDefault();
}, false);

normal.addEventListener('click', function(ev) {
alert('fabulous, really!');
}, false);

×¢Ò⣺ document.querySelector() ÊǺÏÀí»ñÈ¡DOMÔªËØµÄÒ»ÖÖ·½Ê½¡£ºÍjQueryµÄ $() ²î²»¶à¡£ ¿ÉÒÔ¶Á¶Á W3C¡¯s specification ºÍMDNµÄ explanatory code snippets È¥Á˽⡣

Èç¹ûµã»÷.preventÁ´½Ó£¬»áµ¯³ö¸ö¶Ô»°¿ò£¬µã¡°È·¶¨¡±ºóɶʶ¼Ã»·¢Éú£¬ºÇ¡«ºÇ¡«£¬ÒòΪ´¦ÀíÖÐÓÐÖ´ÐÐev.preventDefault()£¬ËùÒÔ²»»áÌøµ½ http://smashingmagazine.com¡£Ã»ÓÐ preventDefault()µÄ¾Í»áÔÚµ¯¶Ô»°¿ò£¬ÇÒÌøÁ´½Ó¿©¡£²»ÐÅÄã¿ÉÒÔÊÔÒ»ÏÂÂï¡£

ͨ³£Çé¿öÏ£¬´¦ÀíʼþµÄ·½·¨ÏëÒª·ÃÎÊ´¥·¢ÔªËØÖ»ÄÜͨ¹ý±äÁ¿ºÍthisʲôµÄÈ¥¹ØÁª£¬ËäÈ»¿´ËƼòµ¥·½±ã£¬µ«addEventListener()¸øÁËÎÒÃǸüºÃµÄÑ¡Ôñ£ºÊ¼þÄ¿±ê£¨target£©£¬²»¹ýËü¿ÉÄܱ»ÆäËûµÄһЩ¶«Î÷»ìÏý£¬ËùÒÔÓÃev.currentTarget¸ü±£ÏÕЩ¡£Í¨³£ÏëÒªÔÚµã»÷¡¢ÐüÍ£»òÊäÈëʼþµÄ»Øµ÷·½·¨ÖзÃÎÊ´¥·¢ÔªËض¼ÊÇÓñäÁ¿ this ¡£ËäÈ»·½±ã£¬µ«Õâ¸ö¹Ø¼ü×ÖÄã¶®µÃ¡­ÓÚÊÇ addEventListener() Ìṩ¸øÎÒÃÇÒ»¸ö¸üºÃµÄ»ñÈ¡·½Ê½£ºevent.target¡£ ²»¹ýËü¿ÉÄܻᱻ»ìÏý£¨ this ±»°óµ½Ææ¹ÖµÄ¶«Î÷ÉϵÄʱºò£©£¬ËùÒÔÓà ev.currentTarget ¸ü±£ÏÕЩ¡£

ʼþ´úÀí£º¸ß¶Ë£¬´óÆø£¬Éϵµ´Î£¡

ÓÃʼþ¶ÔÏóµÄ target ÊôÐÔ£¬Äã¿ÉÒԵõ½´¥·¢Ê¼þµÄÔªËØ¡£

ʼþ±»¼¤»îºó£¬»áÏñºï×ÓÒ»ÑùÑØ×ÅDOMÊ÷´Ó¼àÌý½ÚµãÏ»¬µ½´¥·¢½Úµã£¬È»ºóÔÙÉÏÅÀ»Ø¼àÌý½Úµã¡£Ò²¾ÍÊÇ˵£¬Èç¹ûÄã¼àÌýÁËÒ»¸öDOM½Úµã£¬ÄÇÒ²¾ÍµÈÓÚÄã¼àÌýÁËÆäËùÓеĺó´ú½Úµã¡£´úÀíµÄÒâ˼¾ÍÊÇÖ»¼àÌý¸¸½ÚµãµÄʼþ´¥·¢£¬ÒÔÀ´´úÀí¶ÔÆäºó´ú½ÚµãµÄ¼àÌý£¬¶øÄãÐèÒª×öµÄÖ»ÊÇͨ¹ý target ÊôÐԵõ½´¥·¢ÔªËز¢×÷³ö»ØÓ¦¡£À´¿´ÎÒÏÂÃæµÄÀý×Ó£º

<ul id="resources">
<li><a href="http://developer.mozilla.org">MDN</a></li>
<li><a href="http://html5doctor.com">HTML5 Doctor</a></li>
<li><a href="http://html5rocks.com">HTML5 Rocks</a></li>
<li><a href="http://beta.theexpressiveweb.com/">Expressive Web</a></li>
<li><a href="http://creativeJS.com/">CreativeJS</a></li>
</ul>

Õâ¸öÀý×ÓÖеÄHTML½á¹¹ÊǸöÎÞÐòÁÐ±í£¬µ±Êó±êÐüÍ£»áÏÔʾÏàÓ¦µÄ±êÇ©ÐÅÏ¢¡£ÏÂÃæÊÇËüJS´úÂ룬Ä㽫¿´µ½ËüÖ»Óõ½ÁËÒ»¸öʼþ¼àÌý£¬È»ºóÔÚ´¦Àíº¯ÊýÖеõ½target£¬ÒÔËüµÄ tagName À´½øÐÐÇø·Ö¡£

var resources = document.querySelector('#resources'),
log = document.querySelector('#log');

resources.addEventListener('mouseover', showtarget, false);

function showtarget(ev) {
var target = ev.target;
if (target.tagName === 'A') {
log.innerHTML = 'A link, with the href:' + target.href;
}
if (target.tagName === 'LI') {
log.innerHTML = 'A list item';
}
if (target.tagName === 'UL') {
log.innerHTML = 'The list itself';
}
}

ÎÒ·ÑʰÉÀ²½âÊÍÁ˰ëÌ죬ÄËÃǶ®µÃÕâô×öÒâζ×Åʲôô£¿ÕâÒâζ×ÅÄã¿ÉÒÔ½ÚÊ¡´óÁ¿Öظ´µÄʼþ¼àÌý£¬ÒÔ¼õÉÙä¯ÀÀÆ÷×ÊÔ´ÏûºÄ¡£´ó¶àÊýÈË¿ÉÄÜ»áÓÃjQueryµÄ$(¡®a¡¯).click(¡­) ɶɶɶµÄ£¨ËäÈ» jQueryµÄ on ·½·¨ÓÅ»¯µÄ»¹OKÀ²²»¹ýż»¹ÊÇÂù±ÉÊÓËûµÄ£©£¬Õâô×ö¿´ËÆÒ»¾ä»°Âù´ø¸ÐµÄ£¬¿ÉÆäʵËüÊǰѻñÈ¡µ½µÄËùÓÐAÔªËØÒ»¸öÒ»¸öµÄ×¢²á¼àÌý£¡È»ºóÔÚij¸öʱ¿Ì£¬³ä³â×ÅÎÞÊýʼþ¼àÌýµÄÒ³ÃæÖÕÓÚ¾õÀÛ²»°®£¬×Ô±¬ÒÔÃùÔ©Çü¡£

Ëý»¹ÓÐÒ»¸öºÃ´¦¾ÍÊÇÈÃHTML¶ÀÁ¢ÆðÀ´£¬±ÈÈçÖ®ºó»¹ÓÐÒª¼Ó×ÓÔªËØµÄÐèÇó£¬Ò²²»ÐèÒªÔÙΪÆäµ¥¶À¼Óʼþ¼àÌýÁË¡£

ʼþ¼à²â£¬Ë³±ã˵һϳ¬¼¶Å£±ÆµÄCSSƽ»¬Ð§¹û

ÒÔǰÎÒÃÇ»áÓÃmouseover|mouseoutʼþÀ´°µ´ì´ìµÄʵÏÖhoverЧ¹û£¬¶øÏÖÔÚÓÃCSSαѡÔñÆ÷µÄ:hoverºÍ:focusʲôµÄ¾ÍÖ±½Ó¸ã¶¨ÁË¡£Ïëµ½ÕâÀÄÚÐÄÖ¹²»×¡µÄÉ˸а¡¡­¡­Ä§·¨Ê¦ÃǼá³Öס£¡¿È¿È£¬µ±È»£¬CSSÒ²²¢²»ÊÇÍòÄܵģ¬ÓÐЩÊÂÇ黹ÊÇÒª¸úʼþÅäºÏÍê³É£¬±ÈÈçÏÂÃæÕâ¸öÀý×Ó£¬¶ÔÊó±êÖ¸Õë½øÐж¨Î»¡£ÕâÊÇÏ൱¼òµ¥µÄÁËÊDz»£¬ÎÒÃÇÏȸã¸ö¾ø¶Ô¶¨Î»µÄСÇòÔªËØ£¬ÏÂÃæÊÇËüµÄHTML£º

<div class="plot"></div>

ÕâÊÇËüµÄCSS£º

.plot {
position:absolute;
background:rgb(175,50,50);
width: 20px;
height: 20px;
border-radius: 20px;
display: block;
top:0;
left:0;
}

ÎÒÃǼàÌý²¢´¦ÀídoucmentµÄclickʼþ£¬ÀûÓÃPageXºÍpageY¶ÔСÇò½øÐж¨Î»¡£×¢Òâ°¡ÕâÀÎÒÃÇÐèÒª¼õÈ¥ÇòµÄ°ë¾¶£¬ÒÔÈÃÇòµÄÖÐÐÄÔÚÊó±êÖ¸ÕëÉÏ£º

var plot = document.querySelector('.plot'),
offset = plot.offsetWidth / 2;
document.addEventListener('click', function(ev) {
plot.style.left = (ev.pageX - offset) + 'px';
plot.style.top = (ev.pageY - offset) + 'px';
}, false);

Ëæ±ãµã»÷ÆÁÄ»µÄÈÎÒâλÖã¬Ð¡Çò¶¼»áËæÖ®ÉÁÏÖµ½ÄÇ¡£²»¹ýËü²¢²»ÊÇÆ½»¬¹ýÈ¥µÄ£¬µ«Èç¹ûÄã¹´Ñ¡Õâ¸öʾÀýµÄ¸´Ñ¡¿ò£¬Äã»á·¢ÏÖСÇò¾Í»áºÜÔ²ÈóµÄ»¬¹ýÀ´ÁË¡£Õâ¸öЧ¹ûÄØ£¬¹ýÈ¥µÄ»°¿ÉÄÜÖ»ÄÜÓÃJS¿âÀ´Íê³É£¬µ«ÏÖÔÚ°¡£¬Ê±´ú²»Í¬ÁË¡­¡­ÎÒÃÇÖ»ÐèÒªÓÃCSSд¸ö¹ý¶ÉЧ¹ûµÄÀ࣬¶øÊ£ÏµÄÊÂÇé¾ÍÈÃä¯ÀÀÆ÷È¥´¦Àí¡£ÎªÖÁÓÚ´Ë£¬ÎÒÃÇд¸öÀàÃûΪsmoothµÄÑùʽ£¬ÔÚ¸´Ñ¡¿ò±»Ñ¡ÖÐÖ®ºó£¬½«ÆäÓ¦Óõ½Ð¡ÇòÉÏ£º

.smooth {
-webkit-transition: 0.5s;
-moz-transition: 0.5s;
-ms-transition: 0.5s;
-o-transition: 0.5s;
transition: 0.5s;
}

Ìí¼ÓJavaScript£º

var cb = document.querySelector('input[type=checkbox]');
cb.addEventListener('click', function(ev) {
plot.classList.toggle('smooth');
}, false);

Ëæ×ÅÐÂÊÀ½çµÄÀ´ÁÙ£¬CSSºÍJavaScriptË«½£ºÏèµ£¬Ë­ÓëÕù·æ£¡Âï˳±ã˵Ï£¬ÔÚJSÖÐÒ²ÓиúCSS¹ý¶ÉºÍ¶¯»­Ð§¹ûÓйصÄʼþàÞ¡£

ߣһ¸ö¼üÐèÒª¶à³¤Ê±¼ä£¿

ÕýÈçÄã֮ǰÔÚ¿ÉÓÃʼþÁбíÖп´µ½µÄ£¬ÎÒÃÇÒ²¿ÉÒÔ¼àÌý°´¼üÊäÈëʼþ¡£²»¹ýºÜÒź¶µÄÊÇ£¬ä¯ÀÀÆ÷¶Ô¼üÅÌʼþ´¦ÀíµÄ²¢²»ÊǺܵ½Î»£¬Äã¿ÉÒÔ¿´¿´Jan Wolter¶Ô´ËµÄÏêϸ½âÊͽÓÏÂÀ´ÈÃÎÒÃÇ¿´Ò»¸ökeytimeµÄÀý×Ó£¬Ëü»áÊä³öÓû§°´¼üµÄºÁÃë¼ä¸ô¡£´úÂë²¢²»ÄÑ£º

var resources = document.querySelector('#resources'),
log = document.querySelector('#log'),
time = 0;

document.addEventListener('keydown', keydown, false);
document.addEventListener('keyup', keyup, false);

function keydown(ev) {
if (time === 0) {
time = ev.timeStamp;
log.classList.add('animate');
}
}
function keyup(ev) {
if (time !== 0) {
log.innerHTML = ev.timeStamp - time;
time = 0;
log.classList.remove('animate');
}
}

Ïȶ¨ÒåÎÒÃÇÏëÒª²Ù×ݵÄÔªËØ²¢ÉèÖÃtimeΪ0¡£È»ºóÎÒÃÇÔÚdocumentÉϼàÌýÁ½¸ö¼üÅÌÊäÈëʼþ keydownºÍkeyup¡£

ÔÚkeydownʼþ´¦ÀíÖУ¬ÎÒÃǼì²é±äÁ¿timeÊÇ·ñΪ0£¬Èç¹ûÊÇÔò°Ñʼþ¶ÔÏóµÄtimeStamp¸³Öµ¸øtime¡£ÔÙ¼Ó¸öCSS¶¯»­Ààanimate¸ølog½Úµã£¬ÈÃËüÏò¹ö¶¯ÌõÒ»Ñù¶¯ÆðÀ´

ÔÚkeyupʼþ´¦ÀíÖУ¬Èç¹ûtime»¹ÊÇΪ0ÔòºöÂÔ£¨ÔÚ°´×żüÅÌµÄÆÚ¼äkeydownʼþÊÇÁ¬Ðø²»¶Ï±»´¥·¢µÄ£©£¬Èç¹û²»ÊÇÔòͨ¹ýÁ½Õßʱ¼ä´ÁÏà¼õÈ¥¼ÆËãÒ»´Î°´¼ü²Ù×÷¾­¹ý¶à³¤Ê±¼ä¡£×îºóÈÃtimeΪ0²¢ÒƳýlog½ÚµãµÄanimateÀà

Ū¸öCSS¹ý¶É£¨¶¯»­£©Ð§¹û

µ±ä¯ÀÀÆ÷ÔËÐÐCSS¹ý¶ÉЧ¹ûÊÇ»áÔÚJavaScriptÖд¥·¢Ò»¸ö¶ÀÁ¢Ê¼þ£¬½Ðtransitionend¡£Õâ¸öʼþ¶ÔÏó»áÓÐÁ½¸öÊôÐÔ£º±»ÆäËùÓ°Ïìµ½µÄÊôÐÔÃûpropertyName£¬ºÍÆä¹ý¶ÉËù¾­ÀúµÄʱ¼äelapsedTime¡£

¿ÉÒԲ鿴Õâ¸ödemo¸ÐÊÜһϣ¬´úÂëºÜ¼òµ¥£¬ÏÂÃæÊÇËüµÄCSS£º

.plot {
background:rgb(175,50,50);
width: 20px;
height: 20px;
border-radius: 20px;
display: block;
-webkit-transition: 0.5s;
-moz-transition: 0.5s;
-ms-transition: 0.5s;
-o-transition: 0.5s;
transition: 0.5s;
}

.plot:hover {
width: 50px;
height: 50px;
border-radius: 100px;
background: blue;
}

ÕâÊÇËüµÄJavaScript£º

plot.addEventListener('transitionend', function(ev) {
log.innerHTML += ev.propertyName + ':' + ev.elapsedTime + 's ';
}, false);

µ«ÒòΪFire/Chrome/Safari/OperaµÈÕâЩä¯ÀÀÆ÷³§É̸÷×ÔΪÕþ£¬Ò²ÊÇÒòΪÕâЩʼþ»¹²»³ÉÊ죬ËùÒÔÕâЩʼþÃûͨ³£¶¼»á±»¼ÓÉÏǰ׺£¬ÄÇÔÚʹÓÃʱÄã¾Í²»µÃ²»ÅжÏÏÂä¯ÀÀÆ÷¼æÈÝÐÔ¡£¿ÉÒÔ¿´¿´Õâ¸öDavid Calhoun¡¯s gist¡£

CSS¶¯»­Ê¼þºÍÉÏÃæÑÝʾµÄ¹ý¶Éʼþ»ù±¾Ò»¸öÒâ˼£¬ËüÓÐÈý¸öʼþ£ºanimationstart£¬animationendºÍanimationiteration¡£¿ÉÒÔ¿´MDNµÄdemo¡£

ËÙ¶È£¬¾àÀëºÍ½Ç¶È£¬Ã»ÓÐÎÊÌ⣡

ʼþÎÒÃÇÊǼàÌýµ½ÁË£¬µ«Èç¹ûÏëÈÃËü¸ü¼ÓŒÅÕ¨Ì죬ÎÒÃǾÍÐèÒªÔÙÀ´µãÓÐÉî¶ÈµÄ£¬±ÈÈçÔÚÓû§ÔÚÍÏ×§ÔªËØÊ±£¬¸øÔªËØÀ´¸ö¼ÆËã½Ç¶È¡¢¾àÀëºÍËٶȲîʲôµÄ¡ª¡ªÊ¾Àý¡£

var plot = document.querySelector('.plot'),
log = document.querySelector('output'),
offset = plot.offsetWidth / 2,
pressed = false,
start = 0, x = 0, y = 0, end = 0, ex = 0, ey = 0, mx = 0, my = 0,
duration = 0, dist = 0, angle = 0;

document.addEventListener('mousedown', onmousedown, false);
document.addEventListener('mouseup', onmouseup, false);
document.addEventListener('mousemove', onmousemove, false);

function onmousedown(ev) {
if (start === 0 && x === 0 && y === 0) {
start = ev.timeStamp;
x = ev.clientX;
y = ev.clientY;
moveplot(x, y);
pressed = true;
}
}
function onmouseup(ev) {
end = ev.timeStamp;
duration = end - start;
ex = ev.clientX;
ey = ev.clientY;
mx = ex - x;
my = ey - y;
dist = Math.sqrt(mx * mx + my * my);
start = x = y = 0;
pressed = false;
angle = Math.atan2( my, mx ) * 180 / Math.PI;
log.innerHTML = '<strong>' + (dist>>0) +'</strong> pixels in <strong>'+
duration +'</strong> ms ( <strong>' +
twofloat(dist/duration) +'</strong> pixels/ms)'+
' at <strong>' + twofloat(angle) +
'</strong> degrees';
}
function onmousemove (ev) {
if (pressed) {
moveplot(ev.pageX, ev.pageY);
}
}
function twofloat(val) {
return Math.round((val*100))/100;
}
function moveplot(x, y) {
plot.style.left = (x - offset) + 'px';
plot.style.top = (y - offset) + 'px';
}

ºÃÀ²£¬ºÃÏñ×öÁ˺ܶàÊÂÇéµÄÑù×Ó£¬µ«ÊÂʵÉϲ¢Ã»ÓÐÄÇô¸´ÔÓ¡£¼àÌýonmousedownºÍonmouseupÁ½¸öʼþ£¬ÎÒÃÇÄܵõ½Êó±êµ±Ç°Î»ÖÃclientXºÍclientY£¬»¹ÓмǼ°´¼üʱ¼äµÄtimeStamp¡£µ±Êó±êÒÆ¶¯Ê±£¬¼ì²éÊó±êÊÇ·ñ±»°´ÏÂÁË£¨Í¨¹ýÔÚmousedownʱÉ趨µÄ²¼¶ûÖµ£©£¬Èç¹û°´ÏÂÁËÔòÈÃСÇò¸ú×ÅÊó±êÒÆ¶¯¡£

È»ºóÊǼ¸ºÎ¡ª¡ªPythagoras£¨±Ï´ï¸çÀ­Ë¹¶¨Àí£©Í¨¹ýmousedownºÍmouseupµÄʱ¼ä¼ä¸ôºÍÏñËØÎ»ÒÆ¶øµÃ³öËüÔ˶¯µÄËÙ¶È¡£

ÎÒÃǵõ½ÁËÔ˶¯¿ªÊ¼ºÍ½áÊøµÄxy×ø±ê£¬Ïà¼õµÃµ½¾àÀë²î£¬ÔÙÆ½·½Ïà¼Ó£¬×îºóµÃµ½ºÍµÄƽ·½¸ù£¬¼´ÎªÐ¡ÇòÔ˶¯µÄÎ»ÒÆ¡£ÂïÎÒÃÇ»¹Í¨¹ý¼ÆËãÈý½ÇÐεķ´ÕýÇеõ½ÁËËüÔ˶¯Ç°ºóµÄƫת½Ç¶È£¬¸ß¶Ë°É£¡ºÙºÙÆäʵÕâЩ¶¼Êdz­¡°A Quick Look Into the Math of Animations With JavaScript¡±µÄ¡­¡­Äã¿ÉÒÔ¿´ÏÂÕâ¸öÔÚJSFiddleÉϵÄʾÀý£º

http://jsfiddle.net/codepo8/bAwUf/light/

ýÌåʼþ

videoºÍaudioÕâÁ©ºÜ³±µÄÍæÒâÒ²ÓÐÒ»´ó¶Ñʼþ¹©ÎÒÃÇʹÓᣱÈÈçÓÐȤµÄtimeʼþ£¬Ëü¿ÉÒÔ¸æËßÎÒÃÇÕâÊ׸è»òµçÓ°µÄÒѲ¥·Åʱ³¤¡£¿ÉÒÔ¿´¿´MDNÕâ¸öMGM-inspired dinosaur animation£»ÎÒҲûÊÂÏеÄÂ¼ÖÆÁËÒ»¸ösix-minute screencastÀ´ÍæÅªÁËÒ»ÏÂ~¡£

Ïë¿´ËùÓеÄʼþ¶¯×÷£¿È¥JPlayer¿´Ã½ÌåʼþµÄÑÝÊ¾Ò³Ãæ°É¡£

ÆäËûÊäÈëÏà¹Ø

ÎÒÃÇÖªµÀ£¬ä¯ÀÀÆ÷ÌṩÁËÓëÊó±ê¼üÅ̵Ľ»»¥£¬µ«Õ⻹ԶԶ²»¹»Âú×ãÎÒÃǸü¶àµÄÓ²¼þ½»»¥ÐèÇó¡£±ÈÈç¼ì²âÊÖ»ú»òƽ°åµçÄÔÇãб¶ÈµÄDevice orientationºÍ touch events¡£the Gamepad APIÈÃÎÒÃÇ¿ÉÒÔÔÚä¯ÀÀÆ÷ÖÐ×öÓÎÏ·¿ØÖÆ£»postMessageÈÃÎÒÃÇ¿ÉÒÔÔÚä¯ÀÀÆ÷¸÷´°¿ÚÖ®¼ä½øÐпçÓòÏûÏ¢´«µÝ£»pageVisibilityÈÃÎÒÃÇ¿ÉÒÔµÃÖªä¯ÀÀÆ÷Öе±Ç°±êǩҳ¿É¼û״̬¡£ÉõÖÁµ±windowµÄhistory¶ÔÏóÓвÙ×÷ʱҲÄܼàÌýµÄµ½¡£²é¿´window¶ÔÏóµÄʼþÁÐ±í£¬ÓеĿÉÄÜÒѾ­±»ÊµÏÖÁË£¬»¹Óиü¶àµÄÔÚı»®ÖС­¡­

Â²»¹Üä¯ÀÀÆ÷ÊÇ·ñ»áÖ§³Ö£¬×îÖÕ¶¼ÊÇÒªÖ§³ÖµÄÂÕâЩÊǸÕÐè¡£ÎÒÃÇֻҪĬĬµÈ´ý¾Í¿ÉÒÔÁË£¬É§Ä꣬Ïò×ÅϦÑô±¼Åܰɣ¡=v=

Íæ³ö¸öδÀ´

»ù±¾ÉϾÍÕâÑùÁË£¬¿´£¬Ê¼þ²¢²»ÄÑ¡£Ò»°ãÇé¿öÏ£¬ÄãÖ»ÐèҪע²á¼àÌýËûÃÇ£¬È»ºóÔÚʼþ´¦Àíº¯ÊýÖÐʹÓÃevent¶ÔÏó¾ÍºÃÁË¡£Èç¹ûµ½ÏÖÔÚÄ㻹ûÏëµ½ËüÄÜ×öЩʲôÓÐȤµÄÊÂÇ飬ÄÇÕâÆªÎÄÕÂÒ²Ö»ÄܰïÄãµ¹ÕâÀïÁË¡£±ðÔÙ¹ÜÉÏÎĵÄÄÇЩÀý×ÓÁË£¬ÇëÄãÓÃÄãÄÇÉÏÐâµÄÄÔ´üºÃºÃ˼¿¼Ï£¬Íæ·ßŭСÄñʱºò£¬²»¾ÍÊǼàÌý¸ö´¥ÃþʼþµÄ¿ªÊ¼Óë½áÊø£¬ÔÙ´¦ÀíÏÂÏàÓ¦µÄ·½ÏòºÍ¾àÀë²îËùµÃ³öµÄÉä»÷Á¦Á¿Ã´£¿×îºóವÄÒ»Éù£¬Ð¡Äñ¾Í×ÔÓÉ·ÉÏèÔÚÔ¶·½ÁË~¡£ËùÒÔ£¬¾¿¾¹ÊÇʲô×èÖ¹ÁËÄãµÄ´´Ò⣿¸Ã¼ÓÁ˸öÓÍÁË£¬Í¬Ñ§¡£

   
2603 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Àí½âJavascript
·ÇµäÐÍajaxʵ¼ù
³¹µ×µÄAjax
javascript ʹÓÃCookies
ʹÓà jQuery ¼ò»¯ Ajax ¿ª·¢


Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ


ijº½¿Õ¹«Ë¾IT²¿ JavaScriptʵ¼ù
ijµçÊÓÈí¼þ HTML5ºÍJavaScript
Öк½ÐÅ JavaScript¸ß¼¶Ó¦Óÿª·¢
´óÇìÓÍÌï web½çÃæAjax¿ª·¢¼¼Êõ
ºÍÀûʱ ʹÓÃAJAX½øÐÐWEBÓ¦Óÿª·¢