其分解:
<body onload=d=Date.now,t=d(s=0)>
這只是一個簡單的身體標記與onload事件處理程序。這是JavaScript代碼,將在元素加載後運行。
d=Date.now
只是保存功能成window.d
,哪一個更容易通過d
訪問。
t=d(s=0)
這和做t=Date.now(s=0)
一樣。 Date.now
不使用任何參數,因此它與做t=Date.now()
相同。他只是使用函數調用參數來初始化s
至0
。所以,現在,他有3個變量:
d=Date.now;
t=Date.now(); //the timestamp when the body loads
s=0;
然後有p
元素:
<p style="float:left" onclick="(e=d(++s)-t)<15e3?style.margin=e%300+' 0 0 '+e*7%300:alert(s)">X</p>
其中有一個onclick事件處理程序:
(e=d(++s)-t)<15e3?style.margin=e%300+' 0 0 '+e*7%300:alert(s)
這僅僅是一個三元表達式(類似於到if/else)。你可以分成三部分。條件,真相表達,虛假表達。
的條件是:
(e=d(++s)-t)<15e3
15e3
是15000
。所以,你必須:
(e=d(++s)-t) < 15000
第一部分:
(e=d(++s)-t)
是賦值表達式(返回指定的值)。做d(++s)
和做Date.now(++s)
一樣。請記住,函數對參數不做任何處理,他只是使用函數調用中的參數來將s
增加1。Date.now
正在返回右側的時間戳(當您單擊p
元素時)。
然後它將該時間戳與以前的時間戳相減(存儲在t
中)並將其存儲在e
中。 e
現在是點擊和物體加載之間的毫秒數。
所以:
(e=d(++s)-t)<15e3
是毫秒的量與15000進行比較。如果這是不到15秒,真情表達運行,如果是超過15秒假表達式運行。
事實表達是做:
style.margin=e%300+' 0 0 '+e*7%300
它的p
元件周圍走動一個非常簡單的方法。邊界大概是300,所以e%300
將返回小於300的餘量。另一個餘量乘以7,因此它們不同。
style.margin
的工作原理是事件處理程序以非常特殊的方式被解析。基本上,您可以訪問該元素的任何屬性,就好像它在範圍內一樣。
假表達:
alert(s);
只是打印的你點擊次數。
它並沒有對我的工作,鉻,直到我說單位:
<body onload=d=Date.now,t=d(s=0)><p style="float:left" onclick="(e=d(++s)-t)<15e3?style.margin=e%300+'px 0 0 '+e*7%300 + 'px':alert(s)">X</p></body>
這是一場遊戲,看多少次,你可以在15秒鐘,然後單擊X。
這只是javascript,這是「縮小/醜化」,所以你不能輕鬆閱讀函數名稱。分解它。在您的控制檯/瀏覽器中測試它。 –
它*確實也能正常工作。這是一個基於時間的功能。點擊X.稍等片刻。再次點擊它。 (如果沒有任何反應,請稍等一會,再次點擊)。 –
這是一種遊戲。要查看您可以在幾秒鐘內點擊X多少次。 –