Burada, tüm başlatmaları ifadeden kendi ifadelerine taşıyan, manuel olarak gizlemesi kaldırılmış başka bir sürüm var:
z='p="<"+"pre>"/* ,.oq#+ ,._, */;for(y in n="zw24l6k\
4e3t4jnt4qj24xh2 x/* =<,m#F^ A W###q. */42kty24wrt413n243n\
9h243pdxt41csb yz/* #K q##H######Am */43iyb6k43pk7243nm\
r24".split(4)){/* dP cpq#q##########b, */for(a in t=pars\
eInt(n[y],36)+/* p##@###YG=[#######y */(e=x=r=[]))for\
(r=!r,i=0;t[a/* d#qg `*PWo##q#######D */]>i;i+=.05)wi\
th(Math)x-= /* aem1k.com Q###KWR#### W[ */.05,0>cos(o=\
new Date/1e3/* .Q#########Md#.###OP A@ , */+x/PI)&&(e[~\
~(32*sin(o)*/* , (W#####Xx######.P^ T % */sin(.5+y/7))\
+60] =-~ r);/* #y `^TqW####P###BP */for(x=0;122>\
x;)p+=" *#"/* b. OQ####x#K */[e[x++]+e[x++\
]]||(S=("eval"/* l `X#####D , */+"(z=\'"+z.spl\
it(B = "\\\\")./* G####B" # */join(B+B).split\
(Q="\'").join(B+Q/* VQBP` */)+Q+")//m1k")[x/2\
+61*y-1]).fontcolor/* TP */(/\\w/.test(S)&&"#\
03B");document.body.innerHTML=p+=B+"\\n"}setTimeout(z)';
p = "<" + "pre>";
n = ["zw2", "l6k", "e3t", "jnt", "qj2", "xh2 x/* =<,m#F^ A W###q. */", "2kty2", "wrt", "13n2", "3n9h2", "3pdxt", "1csb yz/* #K q##H######Am */", "3iyb6k", "3pk72", "3nmr2", ""]
for (y in n) {
e = [];
x = 0;
r = true;
t = parseInt(n[y], 36) + "";
for (a in t) {
r = !r
for (i = 0; i < t[a]; i += 0.05) {
x -= 0.05;
o = new Date / 1e3 + x / Math.PI
if (Math.cos(o) < 0)
e[~~(32 * Math.sin(o) * Math.sin(0.5 + y / 7)) + 60] = -~r;
}
for (x = 0; x < 122;) {
S = "eval" + "(z='" + z.split(B = "\\").join(B + B).split(Q = "'").join(B + Q) + Q + ")//m1k"
p += " *#"[e[x++] + e[x++]] || S[x/2+61*y-1]).fontcolor(/\w/.test(S[x/2+61*y-1]) && "#03B");
}
p += B + "\n";
document.body.innerHTML = p;
}
setTimeout(z)
İşte olanlar:
zkodun tamamını içeren çok satırlı bir dizedir. O edilir evaled.
- Kodun sonunda '
za geçilir setTimeout. Mümkün olan en yüksek oranda bir aralıkta değerlendirerek, benzer requestAnimationFrameve evalbirlikte çalışır .
- Kodun kendisi
p, HTML'nin ekleneceği dize arabelleğini ve n36 tabanlı kodlanmış sayılardan oluşan bir diziyi başlatır ( "4"yorumlar tarafından dikkate alınmayan alakasız çöplükler tarafından bir dizeye birleştirilir parseInt).
- her sayı
nbir satırı ( n.length == 16) kodlar . Şimdi numaralandırılmıştır .
- Bir grup değişken başlatılır, bazıları
edizinin değişmezi olarak gizlenir, ancak daha sonra kullanıldıklarında sayılara ( x) veya booleanlara ( r) veya dizelere ( t) dönüştürülürler.
- Sayıdaki her basamak, her dönüşte
tboole tersine çevrilerek numaralandırılır r. Farklı açılardan için xve bağlı akım zaman new Date / 1000 (bir animasyon verir böylece), dizi ebazı kullanarak doldurulur bit seviyesinde operatörleri - ile 1zaman ryanlıştır ve 2zaman s ro zaman doğrudur.
- Daha sonra bir döngü, görüntünün 61 sütununu
x=0çift adımlarla 122 sütununa kadar yineler, tek karakterleri ekler p.
Bters eğik çizgi olduğundan, dize S, zkaynakta göründüğü şeyin doğru bir temsilini elde etmek için ters eğik çizgi ve kesme işaretlerinden kaçınarak kod dizesinden oluşturulur .
- Her iki ardışık sayı
eeklenir ve " *#"animasyonlu görüntüyü oluşturmak için bir karaktere erişmek için kullanılır . Endekslerden biri tanımlanmamışsa, NaNdizin tanımlanmamış bir karaktere çözümlenir ve bunun yerine Sdizeden ilgili karakter alınır (formüle bakın x/2+61*y-1). Bu karakterin bir kelime karakteri olması gerekiyorsa , fontcolorString yöntemi kullanılarak farklı şekilde renklendirilir .
- Her satırdan sonra, sondaki geri alma ve bir satır sonu eklenir
pve HTML dizesi belge gövdesine atanır.
Minimal bir örnek için aynı etki nasıl yeniden yazılabilir?
İşte başka bir örnek:
setInterval(z='s=("setInterval(z=\'"+\
z.replace(/[\\\\\']/g,"\\\\$&")+"\')"\
).match(/.{1,37}/g).join("\\\\\\n");d\
ocument.body.innerHTML=\"<\\pre>"+s.s\
lice(0, 175)+String( + new Date()).fo\
ntcolor("red")+s.slice(188)')
( jsfiddle.net'te demo )
Bu tür bir animasyon için ihtiyacınız olan tüm ilgili şeylere sahiptir:
setIntervalve Dateanimasyon için
Burada kendi kodunun yeniden inşası ( kine benzeri):
s = ( "setInterval(z='"
+ z.replace(/[\\\']/g,"\\$&")
+ "\')" )
.match(/.{1,37}/g).join("\\\n");
Üzerinden çıkış document.body.innerHTMLve bir <pre>öğe
- Kodun bazı bölümlerini animasyonlu dizeyle değiştirme