Category > html5

canvas+workers初探

最近用业余时间看了下html5的资料,不少让人激动的新新特性,用canvas+worders做了个这个玩玩

Continue reading

用canvas写了个简单的写字板

用canvas写了个超级简单的写字板 <html> <head> <title>Canvas tutorial</title> <style type=”text/css”> body {margin:0px;padding:0px;} canvas { border: 1px solid black; position:absolute;top:170px;left:300px;margin:0px;padding:0px;} </style> </head> <body> <canvas id=”tutorial” width=”300″ height=”300″></canvas> <script> function thumbnail(){ this.load = function(){ this.canvas = document.getElementById(‘tutorial’); if (this.canvas.getContext){ this.ctx = this.canvas.getContext(’2d’); } this.ispause=true;//是否暂停绘画,在鼠标按键松开的时候 this.c_p=getPosition(this.canvas); } } window.onload = function(){ window.thumb = new thumbnail(); thumb.load(); thumb.canvas.onmouseup=function(){ thumb.ispause=true; } thumb.canvas.onmousedown=function(event){ thumb.ispause=false; [...]

Continue reading

用 HTML Canvas 创建一个图片浏览器

HTML 5 引入了新的的网页元素:Canvas 是一片空白的绘图区域,网页开发者可以利用 JavaScript 在该区域中自由地进行 2D 绘图。Canvas 可以用于渲染华丽的网页设计界面。本文通过一个详细的实例来说明如何用 Canvas 来制作一个图片的浏览器。最终的效果可以达到 Flash 程序的效果。通过本文,读者可以了解如何使用 Canvas 的各种函数以及如何与用户事件进行交互,适合读者为 Web 设计和架构师。

Continue reading

Yahoo专家:怎样才能成为优秀的前端工程师

本文翻译自著名的前端工程师Nicolas Zakas的博客。Zakas目前是Yahoo!公司的首席前端工程师,Yahoo首页的负责人,也是YUI库的作者之一。当然,相信大家更熟悉他写的名著《JavaScript高级程序设计》(图灵出版)。

Continue reading

从我丢失了;号 之后说开来去

js一直以其松散而著称,然后,很多时候,然,童鞋们,不要误解松散的字面意思,松散但是其词法结构,而不是书写习惯,如果果真误解了,会将自己领入一个自己的松散编织的咒语。 上次写的那个jquery的屏蔽层的, 因为我用的 (function(){})(jquery) 方式 我后面想, 如果想再写个插件的话就要 (function(){})(jquery) (function(){})(jquery) 于是,我调试了下,轰, 脚本报错 了,,,,同时我改传window的作用域来 实验 (function(scope){})(window) (function(scope){})(window) 依然  “页面脚本错误”  斗大的报错信息郝然眼底 到这里,我犯了个不可饶恕的低级错误,也许这个错误同样的很多同学也会步这个后尘,细心的你发现了么,当然,也许你一眼就发现了我的问题出在哪里了,因为我这确实是犯的个低级错误! js 是函数式的语言,在js中,()具有二意性, 意一为表达式中的提高优先级别 比如 (a+b)*c 那该运算表达式优先计算a+b 意二 则为函数调用比如(function(){})() 上面的后面()即为匿名函数(function(){})的调用 如果上面的空匿名函数换成这样 (function(){ return function(){ alert(“自由是现实的,现实是操蛋的”) } })() 首先这个匿名方法返回一个function 如果在后面在加个() 比如这样 (function(){ return function(){ alert(“自由是现实的,现实是操蛋的”) } })() (function(){}) 后面在加一个()里面带一个匿名函数。 系统就会把这个()当成是前面返回的那个匿名函数的调用表达式,而里面的空function(){}则被当做参数提交了。 到这里,前面我不小心弄出来的那个  斗大的报错信息  恍然大悟。 我一直和自己说,注重细节,细节决定成败,然而却一直都忽略了这个问题,每一句表达式后一定要加;来断句,这是个良好习惯,只是一直以来都没有引发问题而已,这里,我不得不深刻反省,犯如此之低级错误,真应该做深刻的检讨,上cctv,上新闻联播,向全国人民道歉! 谁动了我的分号

Continue reading

javascript操作符之new 也疯狂 (2)

JavaScript本是一种基于原形的(prototypal)语言,但它的“new”操作符看起来有点像经典语言。这迷惑了广大程序员们,并导致了很多使用上的问题。 在JavaScript中,不要用到new Object()这种操作,该用{ }来代替。同理,也不要用new Array(),相应的,用[]来代替。JavaScript的Array绝不同于Java的Array,模仿Java的语法只会使人越来越糊涂。 也不要用new Number,new String,或是new Boolean。在JavaScript使用包装对象完全没有必要,只需使用普通的声明就可以了。 不要用new Function来新建一个function,而应当用最普通的function表达式。例如: frames[0].onfocus = new Function(”document.bgColor=’antiquewhite’”) 更好的写法是: frames[0].onfocus = function () {document.bgColor = ‘antiquewhite’;}; 同样定义一个事件,第二句不会立即检测函数体,哪怕是函数体有错,也不会立即报错。只有不了解function内部机制的人才会用new Function这种声明方式。 selObj.onchange = new Function(”dynamicOptionListObjects[" dol.index "].change(this)”); 如 果我们直接写出函数体,编译器是无法看到其内部的(也就无法立即执行、无法立即引发错误)。但如果我们用表达式方式声明函数(如上),看不到函数内部的则 是我们。编程的话,还是尽量对一且都尽量清晰可见吧。以声明函数的方式来返回一个函数,我们可以更加明确地传值,如下代码,它还可以设定一个初始值。 selObj.onchange = function (i) { return function () { dynamicOptionListObjects.change(this); }; }(dol.index); 还有一个不好的习惯是将new放到function的前面,比如,new function对于构造新的对象来说,毫无意义。 myObj = new function () { this.type [...]

Continue reading

javascript操作符之new 也疯狂(new 好久不见)

在taobao ued 上看到一好文, 好久没见过这么爽朗的好文了。转了 JavaScript是一门基于原型的语言,但它却拥有一个 new 操作符使得其看起来象一门经典的面对对象语言。那样也迷惑了程序员们,导致一些有问题的编程模式。 其实你永远不需要在JavaScript使用 new Object()。用字面量的形式{}去取代吧。 同理,不要使用 new Array() ,而代之以字面量[]。JavaScript中的数组并不象Java中的数组那样工作的,使用类似Java的语法只会让你糊涂。 同理不用使用 new Number, new String, 或者 new Boolean。这些的用法只会产生无用的类型封装对象。就直接使用简单的字面量吧。 不要使用 new Function 去创建函数对象。用函数表达式更好。比如: frames[0].onfocus = new Function(”document.bgColor=’antiquewhite’”) 更好的写法是: frames[0].onfocus = function () {document.bgColor = ‘antiquewhite’;}; 第二种形式让脚本编译器更快的看到函数主体,于是其中的语法错误也会更快被检测出来。有时候程序员使用 new Function 是因为他们没有理解内部函数是如何工作的。 selObj.onchange = new Function(”dynamicOptionListObjects["+ dol.index+"].change(this)”); 如 果我们让用字符串做函数体,编译器不能看到它们。如果我们用字符串表达式做函数体,我们同样也看不到它们。更好的方式就是不要盲目编程。通过制造一个返回 值为函数的函数调用,我们可以明确的按值传递我们想要绑定的值。这允许我们在循环中初始化一系列 selObj 对象。 selObj.onchange = function [...]

Continue reading


关于float ,文档流的 一些不经意的地方

标准下靠左浮动的块为什么不能位于父框架顶端<div id=”父框架”><div></div> <div></div> <div>现在只能和这个的顶部平齐</div> <div>这个要位于顶部</div></div> 引用: 贴出源码 <style> #con{border:1px solid #ccc;width:200px;overflow:hidden; zoom:1;} #con div{margin:10px;} .right{float:right;clear:right;border:1px solid #ccc;width:100px} .left{float:left;clear:left;border:1px solid #ccc;width:50px} </style> <div id=”con”> <div>right</div> <div>right</div> <div>right</div> <div>right</div> <div>left</div> <div>left</div> </div> 效果图: 《图一,标准浏览器下》 《图二,歪打正着的ie浏览器下》 一般这种情况下,IE 的表现都是错误的。虽然有可能看起来 IE 的表现是你所期望的。也就是说,歪打正着了,在几乎所有的标准浏览器下面的效果都是图一所示。而ie下面则是图二所指,虽然看着对齐了很舒服。 好了,问题出来了, 那么想办法怎么解决吧。 记的float,的元素是脱离了文档流的,那么,如果把左float  left的style都 去掉float ? 1 <style> 2 #con{border:1px solid #ccc;width:200px;overflow:hidden; zoom:1;} 3 #con div{margin:10px;} 4 .right{float:right;clear:right;border:1px solid #ccc;width:100px} 5 .left{clear:left;border:1px solid #ccc;width:50px} 6 [...]

Continue reading

, ,

margin-top在firefox中会绑架父节点的margin的分析

margin-top在firefox中会绑架父节点的margin,通俗点说呢,就是子节点的margin-top 设置,有些情况下会被传递给了父节点的margin-top。本来head 和content 在设计的语意上来说,是两上下相邻的。而结果却content节点却被子节点margin-top绑架.问题就这样来了。

遇到过这样的问题,然后在网上搜罗了一些资料后解决了,然后这里写点我的心得给大家

我很长一段时间里一直也都认为这是firefox的一个bug,但是最近看过一些资料后在想起这事情,其实这是很正常的。

Continue reading

, ,