2009年5月8日星期五

匿名函数调用

一般匿名函数是这样调用的:
(function(){})()
还能这样调用:
+function(){}()
typeof function(){}()
void function(){}()
new function(){}()
delete function(){}()

变态啊...

2009年4月23日星期四

各浏览器下的绘图

浏览器支持的绘图:
ie(貌似6+): vml(性能比svg和canvas差)
ff(貌似1.5+): (svg canvas) ff下canvas绘制的图像只能以矩形方式响应事件(貌似是这样)
safari(貌似3+): svg canvas(canvas以绘制的不规则区域响应事件,webkit内核)
chrome(貌似1+): svg canvas(canvas以绘制的不规则区域响应事件,webkit内核)
opera(貌似9+): svg canvas

各地图厂商使用的绘图技术:
google ie(vml) ff和opera(svg) safari和chrome(canvas)
mapbar ie(vml) 其余浏览器(canvas) mapbar解决了svg两个bug,非常不错!!!
mapabc flash
51ditu ie(vml) 其余浏览器(用一像素div拼,这样的问题很明显...性能不好,且没有虚线)

性能排序(canvas(调用浏览器底层的c++绘图api) svg vml,本人瞎猜,请勿相信)


注意:
svg (ff是以边的中心为起点,safari和chrome以边为起点,webkit内核有难缠的bug)
另注意:在svg下,事件响应在path时,offsetParent为空.

注意bug:

bug1:解决方法,viewBox起始不要为负数
bug重现,在safari和chrome下面,使用opacity会导致边框被切(当viewBox有负数,如svgns.setAttributeNS(null,"viewBox","-5 -5 200 200")),被切的距离就是那个负数值(好像也不完全是)
被切示例如下:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
style="top:60px;left:60px; overflow: visible; position: absolute;" width="6px" height="93px" viewBox="-3 -3 6 93">
<path fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#0000FF" stroke-width="3px" stroke-dasharray="" d="M 0 0 L 0 87"/>
</svg>


bug2:解决方法,(mapbar的解决方法,目前没看懂)
bug重现,移动svg,左上和右上各有一部分不跟着绘制,并且有残影效果
bug解决(大力感谢mapbar,简直比Google还强!!!),


<marker id="svgArrow" viewBox="0 0 10 10" refX="6" refY="5" markerUnits="strokeWidth" orient="aotu">
<path d="M 0 0 L 10 5 L 0 10 L 4 5 z" fill="#FF0000" fill-opacity="0.6">
</marker>

var spath= document.createElementNS(svgNamespace, "marker");
svgns.appendChild(spath);
var mpath=document.createElementNS(svgNamespace, 'path');
var dp="M 0 0 L 1 1";
mpath.setAttributeNS(null,"d",dp);
spath.appendChild(mpath);

2009年4月18日星期六

fixed定位下offsetParent问题

代码如下(dtd省去),一个网友提供的,

position为fixed时;各浏览器返回的offsetParent不相同,

ie7返回null
ie6返回div
ff返回body
safari返回div
chrome返回div
opera返回div



<style type="text/css">
#target{position: fixed;}
</style>
<script type="text/javascript">
window.onload=function(){
  vartarget=document.getElementById('target');
alert(vartarget.offsetParent.tagName);
 };
</script>
</head>
<body>
<div id="outer" class="test">
  <div id="inner" style="position:absolute;">
    <div id="target" class="test">Target<br/>rainman</div>
  </div>
</div>
</body>
</html>

2009年4月16日星期四

认识 reflow

怿飞blog:
http://www.planabc.net/2009/04/13/reflow/

aoao blog:
http://www.aoao.org.cn/blog/2008/05/reflow/

流放之忆 blog:
http://www.missormiss.com/reflow.html

2009年4月15日星期三

flash9下保存文本文件的方法(只支持IE)

flash10可以保存文件,会弹出一个文件保存对话框,不过flash9就不行了,可以借助于一个IE的函数实现:execCommand("saveAs",true,"a.txt"),只能保存以下几种格式:1,html 2,xml 3,txt

代码如下:
flash.net.navigateToURL(new URLRequest('javascript: var b=window.open(); '
+' b.document.open();'
+' b.document.write("dwdwadwadwadawde"); '
+' b.document.close(); '
+' b.document.execCommand("saveAs",true,"a.txt");void(0)'),"_self");

2009年4月6日星期一

通过file选择框预览本地图片

有时候有这么一个需求,要求用户在input file中选择完文件以后可以预览选中的图片,在ie6中是没问题的,ff3和Google浏览器已经不能这样做了,因为取不到本地的图片路径,value值只是图片文件名,ff2中一个函数可以取到文件路径,不过ff2的用户已经很少了...


ie7中无法访问本地路径的图片,除非是本地的网页或者服务器和本机位于同一台机器上,解决方案是用AlphaImageLoader来加载图片.ff可以浏览本机图片,用file:///开头

随着浏览器安全限制的提高,用户通过file选择框然后预览本机图片变得不可能了,ie8已经不能取得文件的完整路径了...

以后遇到这种事程序员可以省心了...现在流行的方法是用flash选择然后预览,flash10可以实现这样的功能,flash10可以得到文件的byte数组,预览时还可以顺便对图片处理一下,感觉比较好

2009年3月25日星期三

flex动态嵌入字体

台湾人写的,不错
http://blog.corausir.org/programing/ausir-777
FLEX 動態更換中文字型 ( 非嵌入方式 )

2009年3月14日星期六

跨浏览器的 复制到剪贴板 实现

复制到剪贴板IE下最好做,window.clipboardData.setData就ok
ff下面就麻烦了,要修改ff配置信息,在ff里敲入about:config然后改配置(signed.applets.codebase_principal_support设置为true)才能实现...

于是,有人发明了flash大法,借助于flash中的System.setClipboard实现保存到剪贴板操作
这个方法在flash player9以前是有效的,最新的fp10是无效的,fp10安全策略规定必须是用户交互的才可以,不能通过js去掉用flash函数来实现...(就像以前js可以依靠flash多文件上传,随着fp10安全策略的提高现在都不可以了...)

不过有人发明了一个很妙的方法,偷偷的搞了一个flash盖在dom上面,实际响应事件的是flash,这样是完全符合fp10的安全策略的...
js库叫Zero Clipboard 具体见如下地址:
http://www.phpchina.com/bbs/viewthread.php?tid=106195

2009年3月7日星期六

png图片透明部分不响应事件

加载一张PNG图片,放到一个Sprite,实现这个PNG图片透明,或者是半透明的地方不可点

flash中,可以拿一个老外写的类来解决这个问题,interactivePNG
下载地址如下:http://www.6dn.cn/blog/article.asp?id=77
猜测是取到像素以后拿alpha值来判断的...

再说说html里如何实现,如果我没有记错的话,html暂时实现不了(ie滤镜可以,但是用滤镜会有副作用),也许canvas可以实现,没有研究过(ie到现在为止还没有实现canvas).

ie下将png设置为滤镜可以让透明部分(alpha值等于0)的地方不响应事件,ff下面背景设为png,响应鼠标点击范围的依然是矩形.

2009年3月2日星期一

javascript内存泄漏工具

非常不错的几个内存泄漏检测工具...目前在使用Javascript Leaks Detector,感觉不错

使用方法和下载地址如下:
http://zivn.org/zivn/archives/tag/memory-leaks

来自支付宝UED的"完美"跨域

跨域问题上真是创意无限啊,文章在此
http://bbs.51js.com/viewthread.php?tid=82992

2009年2月26日星期四

wmode transparent ie7 bug

swf文件 8或者9(其余版本没测试),设置属性wmode transparent
ie7下用微软输入法,在任何文本输入窗口输入汉字时,汉字显示条会显示在页面顶部或者左侧,然后将页面挤开一点空隙...
非常不美观而且难看...

javascript 2d物理引擎

2d物理引擎box 2d 出了js版本,通过canvas实现的,所以需要浏览器支持canvas,
演示地址如下:
http://box2d-js.sourceforge.net/index2.html

貌似ie比firefox卡很多

js引擎的性能和avm2性能还是没法比,看过几个flash 2d物理引擎,性能要强js很多...

min-height实现

ie6下height类似于ie7和ff的min-height

兼容ie7,6,ff的min-height如下所示:

min-height:100px; /*ie7和ff*/
height:auto !important; /*ie7和ff中覆盖height*/
height:100px; /*ie6*/

2009年2月19日星期四

BMPDecode 下载地址

as3加载bmp用的...

两个下载地址:

http://25swf.blogbus.com/files/12004035100.as

http://www.libspark.org/browser/as3/BMPDecoder/src/com/voidelement/images/BMPDecoder.as

2009年2月18日星期三

页面charset失效问题

今天一个同事说在他的IE6下,访问uu.51ditu.com出现乱码
因为浏览器默认使用utf-8来解析,所以显示的时候就over了,其实页面编码是gb2312的

俺研究了一下,发现这个网页文件不是以gb2312保存的,在Google上搜到一篇文章说:
浏览器读取了页面的html代码后开始进行解析。解析前浏览器要先知道页面的编码方式,然后根据编码方式进行解码,然后才能开始解析。IE 解析网页编码时是 HTML 內的标识优先的,然后是 HTTP header ;而mozilla 系列的浏览器刚刚好相反。一般情况在,很多人是把title排在最前面,并且在title中就出现了UTF-8中文,这样, IE在解析时,就先遇到 UTF-8,不往下解析了。

原文给出了解决方案,地址如下:http://www.phpchina.com/html/86/62786-30725.html

inline元素中包含block小例

inline元素,如span,
包含block元素div时,span依然为inline元素

如果包含table时,span元素会变成block元素


另补充:
一般元素,设置align只会影响自己容器内的元素,
table和iframe这两个元素例外,如果设置为align时,会导致自身布局从block变为floating布局

...还没验证过...有意见拍砖...

2009年2月16日星期一

document.URL和window.location的区别

网上已经有很多这两者区别的文章了,俺今天发现另一个有区别的地方,详细如下:

如果是一个本地文件,比如F:/a.htm
还有一个F:/b.htm
b.htm中嵌入一个iframe,src为a.htm?test

ie6中:
a.htm中的document.URL为本地路径(问号后面的被舍弃了)
window.location为全部路径...

ff3中:
window.location和document.URL一样...

2009年2月13日星期五

再见,淘宝UED

淘宝UED给人印象最深刻的恐怕就是那个极具创意的招聘广告了...
今天,很遗憾的错过了见 怿飞 的机会...
祝福淘宝,祝福淘宝UED团队...这样有艺术,有创意,有人性的公司不多了(Google是一个)

2009年2月12日星期四

Vector类unshift方法的Bug

在此:
http://space.flash8.net/bbs/redirect.php?tid=371446&goto=newpost

今天在天地会看到一个解决方法:
先把length++//先把数组长度加1
再unshift就正常了...
http://bbs.actionscript3.cn/viewthread.php?tid=20862

2009年2月11日星期三

宽度自适应+自适应等高

http://bbs.blueidea.com/thread-2900409-1-1.html
里面还有对alipay UED文章的转载

2009年2月4日星期三

js何时会弹出脚本运行过慢的提示

原文在此

怿飞的blog:
http://www.planabc.net/2009/02/04/how_long_time_will_javascript_execute_in_browsers/

2009年2月2日星期一

用google prettify code给代码着色

偶尔看到这么一个好东西,特地发上来,要是再有代码折叠功能就好了...

步骤如下:
1.进入Blogspot控制台 –>布局 –>修改HTML

2,在head里添加如下代码:


<link href="http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.css" type="text/css" rel="stylesheet"
>
<script src="http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.js" type="text/javascript">
<script>
window.onload=function(){
prettyPrint();
}
</script>



以下为给代码着色示例:



//定义矩形粒子,括号内参数依次为:横坐标,纵坐标,宽度,高度,弧度,是否固定。
var diban1:RectangleParticle=new RectangleParticle(250,0,400,10,0,true)
var diban2:RectangleParticle=new RectangleParticle(250,400,400,10,0,true)
var diban3:RectangleParticle=new RectangleParticle(50,200,400,10,Math.PI/2,true)
var diban4:RectangleParticle=new RectangleParticle(450,200,400,10,Math.PI/2,true)
//矩形粒子的父类AbstractItem的setStyle方法。
diban1.setStyle(1,0x006699,1,0x663366,1)
diban2.setStyle(1,0x006699,1,0x663366,1)
diban3.setStyle(1,0x006699,1,0x663366,1)
diban4.setStyle(1,0x006699,1,0x663366,1)
//添加该粒子,(就当它是addChild理解吧)
addParticle(diban1);
addParticle(diban2);
addParticle(diban3);
addParticle(diban4);




附两个在线转义html的地址:
http://www.elliotswan.com/postable/
http://www.khurshid.com/i-make-postable/




参考如下地址:http://www.antlite.com/blog/2008/07/google-prettify-code-syntax-highligting-in-blogspot/

按键的时间间隔

flash里按键的时间间隔是先慢后快的,如果想实现恒定时间,则需要按键事件配合timer或者enterframe来实现固定的间隔时间

物理引擎ape初学

今天小学习了一下ape,参考的天地会的一篇文章:
http://bbs.actionscript3.cn/viewthread.php?tid=8031&pid=175628&page=1&extra=#pid175628

发现原文有误:
others=other应该改为others.push(other);

2009年1月19日星期一

flex事件removed和remove的区别

测试了一下,发现removed和remove都不能取消默认行为,
removed会冒泡,remove不会冒泡,
removed和remove都有捕获

2009年1月12日星期一

屏蔽flash鼠标右键菜单

flash屏蔽右键菜单需要借助于js,详细如下:
http://www.duzengqiang.com/blog/article.asp?id=373

在搜狗浏览器里测试的时候发现无效,找到了问题所在,原来搜狗浏览器下右键键值等于0,而不是ie6里的2,
IE6下鼠标右键值是2,IE7下鼠标右键值是0,Firefox下鼠标右键值是3,不同浏览器需要区别对待

2009年1月11日星期日

as3中将图片序列化为字符串持久化

如果我们想把bitmapdata存入shareobject中,只能序列化为bytearray来存储,

还有一个方法,可以将bitmapdata先转为bytearray,然后用base64编码为字符串,将字符串存储,
得到图片先将字符串转为bytearray即可

示例如下:
http://www.klstudio.com/post/145.html

2009年1月8日星期四

ScrollPane source加载的位置

var slP:ScrollPane=new ScrollPane();

trace((slP.getChildAt(2) as DisplayObjectContainer).numChildren);

var sprt003:Sprite=new Sprite();

slP.source=sprt003;

trace((slP.getChildAt(2) as DisplayObjectContainer).numChildren);

trace((slP.getChildAt(2) as DisplayObjectContainer).getChildAt(0)==sprt003);

//会输出true,就是这里了

slP.update();

2009年1月6日星期二

yahoo的一套很好用的flash组件

示例和代码在此:
http://developer.yahoo.com/flash/astra-flash/

提供布局,常用组件等等功能,风格和cs3接近,没有aswing那么庞杂...

2009年1月5日星期一

wmode=transparent bug多多

在网上收集的:
firefox下面的textfield问题 (IME输入失效)
firefox下 iframe的问题,如果html里面有个iframe,flash里面的按钮没法点
firefox中一段包含wmode=transparent的DOM,Flash内部的键盘事件全部无法监听

firefox下 鼠标滚轮事件失效
IE下Flash的性能会下降不少 在Firefox下,Flash无法中文输入

2009年1月3日星期六

javaeye上面的一篇module的帖子

地址在此:http://www.javaeye.com/post/825657?page=1

有个回复不错,摘录如下:

module,RSL,framework RSLs都可以减小编译后的swf文件体积。其中,以framework RSLs最实用。例如我的一个网页项目直接编译后有500k,使用framework RSLs后主文件缩小到220k。之后软件不断升级,直接编译后有1000k,但是使用framework RSLs后主文件也只刚到300k。这增加的80k来自于新增的图标和代码。
module: 使用RSL时,module不能利用RSL共享的库。1. 使用module时,100k的swf文件变成 main(70k)+module(30k)=100k 。2. 使用module+RSL时,100k的swf文件变成main(50k)+RSL(50k)+module(30k)=130k 。(我在flex2时测试发现如此。也许以后module能够使用RSL共享库。)framework RSLs:在adobe的缓存文件夹中缓存共享库。这样用户在清除IE缓存后,不会将framework RSLs清除掉。
我的策略是:1.module的数量很多的超大型互联网项目,而且用户每次可以用到的只是其中一部分的时候使用module。2.网页页面篇幅使用数目不多的情况,使用framework RSLs。

支持h.264编码视频

晚上看了一个网友帖子,貌似从fp9的后面几个版本就支持了,据其测试,可以播放mp4文件.还有psp上的pmp文件,因为都是h.264编码视频

http://www.adobe.com/devnet/flashplayer/articles/hd_video_flash_player.html

不过也无所谓了,fp10已经开始普及了...