-
判断iframe是否加载完的完美方法 - [JavaScript]
2009-09-28
原帖:http://www.blueidea.com/tech/web/2009/7024.asp
var iframe = document.createElement("iframe"); iframe.src = http://www.planabc.net; if (iframe.attachEvent){ iframe.attachEvent("onload", function(){ alert("Local iframe is now loaded."); }); } else { iframe.onload = function(){ alert("Local iframe is now loaded."); }; } document.body.appendChild(iframe); -
如何判断脚本加载完成【转】 - [JavaScript]
2009-01-20
原文地址:http://www.planabc.net/2008/10/31/javascript_ready_onload/
在“按需加载”的需求中,我们经常会判断当脚本加载完成时,返回一个回调函数,那如何去判断脚本的加载完成呢?
我们可以对加载的 JS 对象使用 onload 来判断(js.onload),此方法 Firefox2、Firefox3、Safari3.1+、Opera9.6+ 浏览器都能很好的支持,但 IE6、IE7 却不支持。曲线救国 —— IE6、IE7 我们可以使用 js.onreadystatechange 来跟踪每个状态变化的情况(一般为 loading 、loaded、interactive、complete),当返回状态为 loaded 或 complete 时,则表示加载完成,返回回调函数。
对于 readyState 状态需要一个补充说明:
- 在 interactive 状态下,用户可以参与互动。
- Opera 其实也支持 js.onreadystatechange,但他的状态和 IE 的有很大差别。
具体实现代码如下:
function include_js(file) { var _doc = document.getElementsByTagName('head')[0]; var js = document.createElement('script'); js.setAttribute('type', 'text/javascript'); js.setAttribute('src', file); _doc.appendChild(js); if (!/*@cc_on!@*/0) { //if not IE //Firefox2、Firefox3、Safari3.1+、Opera9.6+ support js.onload js.onload = function () { alert('Firefox2、Firefox3、Safari3.1+、Opera9.6+ support js.onload'); } } else { //IE6、IE7 support js.onreadystatechange js.onreadystatechange = function () { if (js.readyState == 'loaded' || js.readyState == 'complete') { alert('IE6、IE7 support js.onreadystatechange'); } } } return false; } //execution function include_js('http://www.planabc.net/wp-includes/js/jquery/jquery.js'); -
用JS获取图片尺寸 - [JavaScript]
2009-01-20
以前我还真不知道image对象可以这样用的,唉~~out了!
JS代码如下:
function getFileSize(filePath){ var image=new Image(); image.dynsrc=filePath; alert(image.fileSize); }调试:
<input name="file" size="30" type="file" onchange="getFileSize(this.value)" />
-
08年 ,JavaScript总结[转] - [JavaScript]
2009-01-12
原文:http://blog.csdn.net/KimSoft/archive/2009/01/08/3733628.aspx
Jacob Seidelin 在他的博客中写道:
“2008年真是太棒了,不仅仅是因为很多厉害的人物在使用JavaScript和新的canvans元素,浏览器厂商也在竞争,试图超越对方在JavaScript方面的表现,这都证明了JavaScript的重要性。以下是我的总结:
Games
对于JavaScript游戏来说这一年很伟大。使用DHTML和基于Canvas的游戏似乎有能力来接管Flash的一些领域。许多经典的游戏都被重新的设计:Super Mario , Pac-Man (YUI pacman:很酷的YUI JavaScript库游戏), Breakout , Space Invaders , Bomberman 和 T&C Surf Designs 。
还有很多在经典的旧游戏上加入了他们的新思想:Matt Hackett创作的 Spacius , Mark Wilcox 创作的 Invaders from Mars , VertigoProject创作的 RedLine Racing 和 Tetris game 。
我们甚至还看到了一些角色扮演的游戏:Andrew Wooldridge创造的Tombs of Asciiroth 和 CanvasQuest ,Pierre Chassaing创造的ProtoRPG。 虽然他们大多数都只是试用版或演示,但是我相信有一天他们会变的相当的酷。
2008年还出现了一些有趣的JavaScript / DHTML游戏库,最突出的就是GameJs (GameJS:超酷的Canvas游戏库)和GameQuery ,后者为jQuery库的扩展。

最后这个很特别, DEFENDER of the favicon,它将旧游戏Defender压缩到了只有16x16的空间。
Demos
越来越多的浏览器开始支持canvas元素,也就是说,在绘制动态图形方面我们又多了一种选择。有人制作出了一个小型简单的演示 ,用于展示Canavs的能力,但是有些人在这个基础上又向前迈了一步,就像 Matt Westcott制作的Antisocial demo 。
今年的大忙人Mathieu 'p01' Henri制作了很多小应用,使用一行代码就能做相当酷的事:Rubber effect ,Tunnex ,Mars ,他们都在256个字节以内!
Mathieu Henri 利用canvas元素,在20 lines 比赛 中创造出了惊人的效果: Dynamic Hypnoglow ,Twinkle 和 Hypno Trip Down the Fractal Rug 。这次比赛的优秀作品还有:colliding balls ,3D cube effect 和 dynamically generated BMP flames 。
Asylum inmates在20-line games的比赛中创建了:Lunar Lander ,a Boulderdash clone ,Wolfenstein 3D 。
3Dcanvas元素只支持2D图像,但是这并不代表他不能制作出3D的效果:basic 3D cubes , texturing experiments , JavaScript/Canvas 3D engines(很酷的 3D Canvas 演示)。还有许多3D的东西在Nihilogic上。

Emulation
Matt Westcott创造的JSSpeccy the ZX Spectrum emulator 。
James Urquhart 创造的SCUMM interpreter 。
我个人最喜欢的是JavaScript AGI interpreter。
Graphics
最令人印象深刻的是John Resig将Processing语言加入JavaScript-Processing.js ,Aza Raskin创建了Algorithm Ink。Eitan Suez将Turtle,字符串图像变成工具转换成JavaScript版,TurtleJS 。
AudioCameron Adams 创建了一个有趣的JavaScript实例:JS-909 (JS-909:一个不使用Flash的有趣打鼓机器),这是一个打鼓机器,能够演奏声音而不使用Flash,也不使用任何库,声音由标签引入。
sk89q 创造的sine waveform generator ,动态生成和播放WAV文件。
其他
你能使用CSS做些什么了?是不是只是为了您的文字样式?显然不是,Román Cortés证明了这一点,他创造一个 Simpson的形象 ,但这需要你拥有足够的CSS技巧。另外,Ernest Delgado 提供了一个汽车导航的演示 (canvas:驾驶导航)。
最后一个类似于我们小时候玩的积木,Cubescape ,可选择不同的颜色。
我在此许愿,希望2009年的javaScript能更酷!” -
prototype.js中的each方法 - [JavaScript]
2008-02-04
each方法是prototype框架中一个典型的有意思的运用,利用each方法传入自定义迭代函数来厉遍枚举对象,采用该方法后你在你的代码里将看不到for循环的代码了。
来看prototype官方API定义的each表达式:each(iterator[, context]) -> Enumerable
新的1.6版给each增加了一个context可选参数,利用它可以指定函数的作用范围,在之前的1.5版中如要这么做,是要给iterator函数bind一个作用范围,这么一个小修改,使得在代码的表达上更加简洁了点,看DEMO:
var foo=Class.create({
initialize: function(){
this.name="Jim";
},myMethod: function(){ //新方法
$R(1,10).each(function(i){
document.writeln(i+'. '+this.name+'
');
}, this);
}myMethod2: function(){ //旧方法
$R(1,10).each(function(i){
document.writeln(i+'. '+this.name+'
');
}.bind(this));
}});
另外,each方法还支持一个$break标识,如要跳出迭代函数,则在需要的地方throw $break就成了。