- UID
- 1
- 精华
- 积分
- 76365
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
参考Minecraft的§k效果。
如何把它应用到网页上呢?
1、我们定义一个新的样式,名字叫“obfuscated”。- .obfuscated
- {
- display: inline
- }
复制代码 因为不想让打乱的字符串换行,所以用display: inline了。
2、写JS。- if(!document.querySelectorAll)
- document.querySelectorAll = function(selector)
- {
- var head = document.documentElement.firstChild;
- var styleTag = document.createElement("STYLE");
- head.appendChild(styleTag);
- document.__qsResult = [];
- styleTag.styleSheet.cssText = selector + "{x:expression(document.__qsResult.push(this))}";
- window.scrollBy(0, 0);
- head.removeChild(styleTag);
- var result = [];
- for (var i in document.__qsResult)
- result.push(document.__qsResult[i]);
- return result;
- };
- function randomString(count)
- {
- var str="";
- var characters = "!@#$%^&*0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
- while(count--)
- str = str + characters[Math.floor(characters.length * Math.random())];
- return str;
- }
- function obfuscateChildren(elm)
- {
- for(var i = 0; i < elm.childNodes.length; i++)
- {
- if(!!elm.childNodes[i].nodeValue)
- {
- elm.childNodes[i].nodeValue = randomString(elm.childNodes[i].nodeValue.length);
- }
- }
- for(var i = 0; i < elm.children.length; i++)
- {
- obfuscateChildren(elm.children[i]);
- }
- }
- function updateObfuscated()
- {
- var elms = document.querySelectorAll("[class='obfuscated']");
- for(var i = 0; i < elms.length; i++)
- {
- obfuscateChildren(elms[i]);
- }
- }
- setTimeout(updateObfuscated, 0);
- setInterval(updateObfuscated, 15);
复制代码 这份JS兼容IE8以上的IE,以及Chrome。别的浏览器没试过,但目测是兼容的。许多浏览器限定的语法都没使用。此外,这份代码不依赖jQuery。
IE8不支持document.querySelectorAll,所以自己实现了一个。
它会遍历一个元素的所有的子节点,这样就兼容比如<i>、<u>、<b>、<font>等的格式标签了。
因为它是每15毫秒更新一次,所以要考虑到客户机器的性能,不能对过长的字符串进行这样的处理。这个数值可以改成30。之所以设置为15,是因为屏幕刷新率是60Hz,大约16.667毫秒一次刷新。设置为30相当于把这个数值翻倍——也就是30Hz的刷新率。
所有class为“obfuscated”的div都会被支持。
所以如果我这样写的话:- <font face="宋体">
- <div class="obfuscated">aa<u>bb<b>cc<i>dd</i>ee</b>ff</u>gg</div><br>
- <div class="obfuscated">aaa</div><br>
- <div class="obfuscated">aa</div><br>
- <div class="obfuscated">a</div><br>
- </font>
复制代码 那么效果看起来应该是这样的:
aabbccddeeffgg
aaa
aa
a
|
|