标签 ‘html’

如何有效的捕获JavaScript焦点

八月 14th, 2009 由 Rock 发表

阅读本文可理解并解决以下问题:

  • 设置元素可获得焦点以监听键盘事件
  • 某个元素明明设置了聚焦却没效果
  • 聚焦时抛出异常的

1. 设置元素可获得焦点以监听键盘事件

元素聚焦最大好处就是可允许发送键盘事件,HTML很多元素默认就有可聚焦,如form表单元素,a锚链接等,但大部份默认是不能聚焦的。要使得元素能够聚焦,可以在HTML代码或JavaScript脚本中实现。

html:

  <div tabIndex="0" style="height:100px;width:100px; background:red;"></div>

JavaScript:
oDiv.tabIndex = 0;

其中tabIndex是TAB键的导航顺序,可有正,负或零。

当元素获得焦点时会有边框指示,如果想不显示这个边框,可以

html:

<div tabIndex="0"  hidefocus="on" ></div>

JavaScript:
oDiv.hideFocus = ‘on’;

2. 元素明明设置了聚焦却没效果

有时用JavaScript设置了元素聚焦,但最后焦点却不落在该元素上,百思不得其解。

问题在于如果在可焦点元素的事件处理函数中聚焦其它元素,就有可能聚不了焦点,因为如果该事件是个可获得焦点的事件,如mouse, keydow(keypress)等等,在这些事件的处理函数内直接聚焦其它元素是失败的。

oDiv.onmousedown = function(){
   document.getElementById('ipt').focus();
};

参考浏览器内核处理流程图:

当浏览器第一次Reflow回流后,焦点停在另一个元素上,但回流返回后,事件处理后默认的操作将继续执行,那就是聚焦到事件源,也就是mousedown的元素,这时引发第二次回流,当回流后焦点聚在该元素上.所以在事件处理函数中的聚焦变得无效.

有没解决方法? 答案是肯定的. 由图可知,只要把聚焦放到第二个Reflow回流之后执行即可.这个可利用setTimeout方法作延迟先放进队列等后再执行.因为由于JavaScript引擎单线程特性,图上整个过程都是连着执行的,该过程中JS引擎一直没有空闲过,当上面所有操作都完成后并后,定时回调才有机会被执行.所以可以:

oDiv.onmousedown = function(){
  setTimeout(function(){
      document.getElementById('ipt').focus();
   }, 0);
};

由上可知,最后那个毫秒数即使设为0也没关系.

3. 聚焦时抛出异常的
在IE中,当元素不可见时如果聚焦的话,会抛出一个异常,因为在很多应用中我们往往不再对元素是否不可见作测试就聚焦了,因为即使这样也没什么问题(谁说不可见元素就不可以聚焦的?)..所以,在IE下可用try{}catch(){}来忽略这个异常.

   try{
     element.focus();
   }catch(e){}

到此,与JavaScript焦点捕获相关的问题讨论就完成了.点击运行示例.

建立基本的页面框架 — 第一步小试牛刀

七月 21st, 2009 由 Rock 发表

可分为几个步骤:

  • 创建HTML页面
  • 创建Viewport
  • 利用BorderLayout布局viewport
  • 放置tab或其它控件

什么是viewport?
viewport从结构上可以看成一个层,它布满整个浏览器客户区,当浏览器宽高(size)改变时会自动适应.从这个意义上来说,与EXT的viewport功能是一致的.在库中一个viewport是一个DIV结点,绝对方式定位,放在body下.
viewport的作用就是,当宽高改变时,可通知内部的布局管理器重新布局子控件.众所周知,当用CSS改变一个元素的宽高时在JavaScript端是得不到任何通知的,例如将一个CSS类作用到一个元素时,你不作测试的话没法得知其高度已经改变,它不像事件监听那样,可以给元素添加事件监听器,当有动作发生时得到通知.除非所有元素都通过CSS布局,但这是不够灵活的,试想用CSS实现BorderLayout布局,并具有其特性,始终还得通过脚本控制CSS属性来实现,此时就会遇到一个问题,既然容器宽高已经改变,就得重新布局子控件,如上所说,CSS改变脚本得不会通知,要重新布局子控件就必须自定容器的事件机制,当通过脚本来改变容器宽高时(这里再次强调是通过脚本,而非直接设置CSS),容器就发送一个表明宽高已改变的事件,并通知布局管理器重新布局子控件.

了解了viewport,清楚为什么要用viewport,就开始搭建一个最简单的最常用到的页面框架,简单起见,元素不多,北面一个面板+tab,西面一面板和中间一个面板.

1.创建HTML页面
HTML页面是添加面板的HTML内容,具体可参见示例,这里不一一列出.

1.创建viewport,指定布局为border layout

  var viewport = new CViewport({layout:'border'});

2.利用布局viewport,这里主要创建北,西,中三个面板,并在北面板中添加一个tab控件

  //添加北,西,中面板
  //
  var northPanel = new CPanel({view : 'northPanel', maxH:70,height:70});
  var westPanel = new CPanel({view : 'westPanel', width:191, maxW:450});
  //card布局:容器里面的元素宽高与窗口一致.
  var centerPanel = new CPanel({view : 'centerPanel', layout:'card'});
  //在北面板中添加Tab控件
  //itemAutoConnect : true TabItem当选择时自动加载
  //contentPanel:存放TabItem内容面板的父容器,
  //当TabItem未指定Panel时,自动生成的Panel就被添加到该容器中.
  var tab = new CTab({
      id:'fr-tab', 
      itemAutoConnect:true,
      contentPanel:centerPanel, 
      array:[
       {title:'桌面 - DIV', panel:CC.$('deskPanel')},
       {title:'谷歌 - Google - IFRAME', src:'http://www.google.com'},
       {title:'百度 - Baidu - IFRAME', src:'http://www.baidu.com'},
       {title:'背光脚本', src:'http://www.bgscript.com'},
       {title:'通过Ajax载入内容', url:'http://www.bgscript.com/q?bg_q=changelog'}
  ]});
 
  northPanel.add(tab);
  //
  // dir:north,指明为北边容器,gap:1,空隙为1, split:true指明允许分隔条
  //
  viewport.add(northPanel, {dir:'north', gap:0})
             .add(westPanel, {dir:'west', gap:1, split:true})
	     .add(centerPanel, {dir:'center'});
  //集中渲染显示
  viewport.render();

3.利用tab加载IFRAME页面示例

  //选择第一项
  tab.select(0);

至此,一个最基本的页面框架已经建好了!

演示地址:http://www.bgscript.com/bgjs/samples/basicframe.html

JavaScript可否实现多线程 —- 深入理解JavaScript定时机制

七月 16th, 2009 由 Rock 发表

容易欺骗别人感情的JavaScript定时器

JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如

setTimeout( function(){ alert(’你好!’); } , 0);
setInterval( callbackFunction , 100);

认为setTimeout中的问候方法会立即被执行,因为这并不是凭空而说,而是JavaScript API文档明确定义第二个参数意义为隔多少毫秒后,回调方法就会被执行. 这里设成0毫秒,理所当然就立即被执行了.
同理对setInterval的callbackFunction方法每间隔100毫秒就立即被执行深信不疑!

但随着JavaScript应用开发经验不断的增加和丰富,有一天你发现了一段怪异的代码而百思不得其解:

div.onclick = function(){
setTimeout( function(){document.getElementById(’inputField’).focus();}, 0);
};

既然是0毫秒后执行,那么还用setTimeout干什么, 此刻, 坚定的信念已开始动摇.

直到最后某一天 , 你不小心写了一段糟糕的代码:

setTimeout( function(){ while(true){} } , 100);
setTimeout( function(){ alert(’你好!’); } , 200);
setInterval( callbackFunction , 200);

第一行代码进入了死循环,但不久你就会发现,第二,第三行并不是预料中的事情,alert问候未见出现,callbacKFunction也杳无音讯!

这时你彻底迷惘了,这种情景是难以接受的,因为改变长久以来既定的认知去接受新思想的过程是痛苦的,但情事实摆在眼前,对JavaScript真理的探求并不会因为痛苦而停止,下面让我们来展开JavaScript线程和定时器探索之旅!

拔开云雾见月明

出现上面所有误区的最主要一个原因是:潜意识中认为,JavaScript引擎有多个线程在执行,JavaScript的定时器回调函数是异步执行的.

而事实上的,JavaScript使用了障眼法,在多数时候骗过了我们的眼睛,这里背光得澄清一个事实:

JavaScript引擎是单线程运行的,浏览器无论在什么时候都只且只有一个线程在运行JavaScript程序.

JavaScript引擎用单线程运行也是有意义的,单线程不必理会线程同步这些复杂的问题,问题得到简化.

那么单线程的JavaScript引擎是怎么配合浏览器内核处理这些定时器和响应浏览器事件的呢?
下面结合浏览器内核处理方式简单说明.

浏览器内核实现允许多个线程异步执行,这些线程在内核制控下相互配合以保持同步.假如某一浏览器内核的实现至少有三个常驻线程:javascript引擎线程,界面渲染线程,浏览器事件触发线程,除些以外,也有一些执行完就终止的线程,如Http请求线程,这些异步线程都会产生不同的异步事件,下面通过一个图来阐明单线程的JavaScript引擎与另外那些线程是怎样互动通信的.虽然每个浏览器内核实现细节不同,但这其中的调用原理都是大同小异.

由图可看出,浏览器中的JavaScript引擎是基于事件驱动的,这里的事件可看作是浏览器派给它的各种任务,这些任务可以源自JavaScript引擎当前执行的代码块,如调用setTimeout添加一个任务,也可来自浏览器内核的其它线程,如界面元素鼠标点击事件,定时触发器时间到达通知,异步请求状态变更通知等.从代码角度看来任务实体就是各种回调函数,JavaScript引擎一直等待着任务队列中任务的到来.由于单线程关系,这些任务得进行排队,一个接着一个被引擎处理.

上图t1-t2..tn表示不同的时间点,tn下面对应的小方块代表该时间点的任务,假设现在是t1时刻,引擎运行在t1对应的任务方块代码内,在这个时间点内,我们来描述一下浏览器内核其它线程的状态.

t1时刻:

GUI渲染线程:

该线程负责渲染浏览器界面HTML元素,当界面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行.本文虽然重点解释JavaScript定时机制,但这时有必要说说渲染线程,因为该线程与JavaScript引擎线程是互斥的,这容易理解,因为JavaScript脚本是可操纵DOM元素,在修改这些元素属性同时渲染界面,那么渲染线程前后获得的元素数据就可能不一致了.

在JavaScript引擎运行脚本期间,浏览器渲染线程都是处于挂起状态的,也就是说被”冻结”了.

所以,在脚本中执行对界面进行更新操作,如添加结点,删除结点或改变结点的外观等更新并不会立即体现出来,这些操作将保存在一个队列中,待JavaScript引擎空闲时才有机会渲染出来.或许这里你有个疑问了,为什么JS代码块的alert时界面有更新的,JS不是正在运行吗?其实当alert发生时,浏览器内核就会挂起JavaScript引擎线程,并促使界面执行了更新.

GUI事件触发线程:

JavaScript脚本的执行不影响html元素事件的触发,在t1时间段内,首先是用户点击了一个鼠标键,点击被浏览器事件触发线程捕捉后形成一个鼠标点击事件,由图可知,对于JavaScript引擎线程来说,这事件是由其它线程异步传到任务队列尾的,由于引擎正在处理t1时的任务,这个鼠标点击事件正在等待处理.

定时触发线程:

注意这里的浏览器模型定时计数器并不是由JavaScript引擎计数的,因为JavaScript引擎是单线程的,如果处于阻塞线程状态就计不了时,它必须依赖外部来计时并触发定时,所以队列中的定时事件也是异步事件.

由图可知,在这t1的时间段内,继鼠标点击事件触发后,先前已设置的setTimeout定时也到达了,此刻对JavaScript引擎来说,定时触发线程产生了一个异步定时事件并放到任务队列中, 该事件被排到点击事件回调之后,等待处理.
同理, 还是在t1时间段内,接下来某个setInterval定时器也被添加了,由于是间隔定时,在t1段内连续被触发了两次,这两个事件被排到队尾等待处理.

可见,假如时间段t1非常长,远大于setInterval的定时间隔,那么定时触发线程就会源源不断的产生异步定时事件并放到任务队列尾而不管它们是否已被处理,但一旦t1和最先的定时事件前面的任务已处理完,这些排列中的定时事件就依次不间断的被执行,这是因为,对于JavaScript引擎来说,在处理队列中的各任务处理方式都是一样的,只是处理的次序不同而已.

t1过后,也就是说当前处理的任务已返回,JavaScript引擎会检查任务队列,发现当前队列非空,就取出t2下面对应的任务执行,其它时间依此类推,由此看来:

如果队列非空,引擎就从队列头取出一个任务,直到该任务处理完,即返回后引擎接着运行下一个任务,在任务没返回前队列中的其它任务是没法被执行的.

可以试试运行以下例子作测试,第一个定时器是一个死循环,第二个定时器是向界面输出一串字符串,第一个定时器比第二个定时器要来得早.

setTimeout(function(){
for(;;);
}, 50);
setTimeout(function(){alert(’Hello’);}, 51);

运行后可看出,在没浏览器没提示脚本繁忙前第二个定时器alert是不会弹出的,因为单线程关系,第一个定时器回调脚本未返回前第二个脚本是没机会运行.

相信您现在已经很清楚JavaScript是否可多线程,也了解理解JavaScript定时器运行机制了,下面我们来对一些案例进行分析:

案例1:setTimeout与setInterval

setTimeout(function(){
   /* 代码块... */
   setTimeout(arguments.callee, 10);
}, 10);
 
setInterval(function(){
   /*代码块... */
 }, 10);

这两段代码看一起效果一样,其实非也,第一段中回调函数内的setTimeout是JavaScript引擎执行后再设置新的setTimeout定时, 假定上一个回调处理完到下一个回调开始处理为一个时间间隔,理论两个setTimeout回调执行时间间隔>=10ms .第二段自setInterval设置定时后,定时触发线程就会源源不断的每隔十秒产生异步定时事件并放到任务队列尾,理论上两个setInterval回调执行时间间隔<=10.

案例2:ajax异步请求是否真的异步?

很多同学朋友搞不清楚,既然说JavaScript是单线程运行的,那么XMLHttpRequest在连接后是否真的异步?
其实请求确实是异步的,不过这请求是由浏览器新开一个线程请求(参见上图),当请求的状态变更时,如果先前已设置回调,这异步线程就产生状态变更事件放到JavaScript引擎的处理队列中等待处理,当任务被处理时,JavaScript引擎始终是单线程运行回调函数,具体点即还是单线程运行onreadystatechange所设置的函数.

JavaScript - Button(圆角非圆角)按钮控件制作

五月 26th, 2009 由 Bgser 发表

Button(圆角非圆角)按钮控件制作

    HTML按钮不出乎几种组织方法:

  • 固定宽高,背景图片也是固定好的.
  • 这方法比较局限,宽高固定了,文字也得固定,不过用这种方法的一般文字也嵌进图片中.这种方法通过用于一般的快速开发的网页和一些图标按钮中.

  • 高度固定,长度不限.高度可用padding来扩充,设置按钮边框,背景采用一幅图片,图片repeat-x,如果是支持圆角的浏览器,再设置按钮的圆角样式.jQuery自带UI就用到该方法.
  • 采用滑动门技术,固定高度,宽度自动,但最大宽度有限制.
  • 这种比较自由,效果好看,HTML结点构成也够简洁,背景图只需一幅就够了,但局限也是有的,先是最大宽度有限制,
    其次,如果只用两个HTML元素构建的话(通常是A和span),滑动门那圆脚部分边框外就得与背景颜色相同,以覆盖父结点背景图,如果不考虑页页背景有多种颜色的话,这情境就不必考虑了.

  • 采用左,中,右的布局,固定高度,宽度自动,并且宽度没有限制,左边右边布局固定宽度,中间根据内容自动扩展.
  • 这种方法需要更多的HTML结点来组织,但够灵活,消除了上一点所说的圆解边框色背景局限.

  • 宽高都没限制,这种按钮需要更多的HTML结点,可用一个井字形TABLE或多个DIV再加padding构建,结构更接近一个窗口控件,背影图片要显示得好看的话难处理,实际上也少应用到.

按钮HTML的组织
第一种制作可直接到www.mycoolbutton.com在线生成,最后一种不作介绍,下面介绍采用滑动门技术和左,中,右的布局按钮的制作.
滑动门:在a标签里增加一个span标签,给a标签定义一个样式,让其显示图片的左半部分,再给span定义一个样式,宽度为圆角所占宽度让其显示图片的右半部分,当两个半边的图片重合起来就达到这个效果.
当然,不限于a标签或span,其它的也可以.
左中右布局:既可以用DIV实现,也可以用TABLE,个人更倾向于TABLE,一个TR,三个TD,因为对齐容易,也不用设置过多的padding,左右TD固定宽度或设padding以留空间,宽度与圆角宽一样,中间TD背景图repeat-x.

滑动门按钮HTML样例
<a class="sliperbutton" title="home" href="#"><span></span>My Button</a>
Table结构按钮HTML样例
<table cellspacing="0" cellpadding="0" border="0" class="g-btn" title="登 录">
  <tr>
     <td class="g-btn-l"></td>
      <td class="g-btn-c">
       <button class="g-btn-text" type="button">My Button</button>
      </td><td class="g-btn-r">
      </td>
   </tr>
</table>

按钮背景图的组织
滑动门结构背景图就只一能一张,如果图案越长图片大小就越大,这是避免不了的.

 /**
  * 背景图像由右往左,由上而下打印,不重复.
  * 这里圆角长度是15px.
  */
 .sliperbutton {
   background:url(buttonbk.gif) no-repeat right top;
   padding:4px 15px 0 0;
 }
 a.sliperbutton:hover{text-decoration:none;}
 
  /**
   * float:left使得行内元素span视作块元素,使得宽,高,padding,margin等设置有效.
   * 因为父层A的padding-top为4px,所以SPAN要往上作-4px偏移.
   */
 .sliperbutton span {
     background:url(buttonbk.gif) no-repeat left top;
     float:left;
     padding-right:15px;
     height:24px;
     margin-top:-4px;
  }

左中右结构的按钮也可以一幅图片,图片分为上下两部,上半部为左,右圆角,下半部分为中间repeat-x部分,整幅图片宽度取决于左圆角宽度+右圆角宽度.

 /**
  * display:inline-block; 将对象呈递为内联对象,
  * 但是对象的内容作为块对象呈递.
  */
 .g-btn{
   display:inline-block;
 }
.g-btn-l, .g-btn-r {
/**IE中这个必要,要不字体大小超过宽度就乱了.*/
 font-size:1px !important; 
 height:23px;
 width:4px;
}
 
.g-btn-l, g-btn-c, g-btn-r{
  background-image:url(btnbk.gif);
  background-repeat:no-repeat;
}
 
/**定位背景图*/
.g-btn-l {background-position:0 -48px;}
.g-btn-r {background-position:0 -55px;}
 
/**注意这里的repeat-x*/
.g-btn-c{
   background-position:0 -106px;
   background-repeat:repeat-x;
}

点击这里查看BackLight库已实现的按钮.

一些有趣的网站,主要运用JavaScript+CSS+HTML

五月 22nd, 2009 由 Bgser 发表

这些站点主要运用JavaScript+CSS+HTML技术开发,值得借鉴。

背光一发现有新的网站就立即更新,您也可以推荐~。

http://aviary.com/

Aviary 使用了非常圆润的 按钮 效果,点击 Tab 后,渐出渐入的栏目介绍性内容非常漂亮,那些菜单也特别漂亮。

http://www.podcast-tuneup.com/

主题不错,布局协调,如果把展示图片的FLASH控件换成JS的就更好。

http://www.monofactor.com/

看中的是该站用使用幻灯风格展示图片。

Alex Buga -
http://www.alexbuga.com/



Alex Buga 自诩为 Web 设计超级明星,使用了类似幻灯片的方式展示他最近的活动。位于右上角的那个主导航条也很 Cool,不过该站点大量使用了
Ajax。
Coda, one Window Web development -
http://www.panic.com/coda/



这个站可谓家喻户晓。是很多人获得灵感的地方。
Kobe -
http://www.arcinspirations.com/kobe/



漂亮的幻灯式内容效果,并结合了 Flash。(该站使用了单页式设计)
Dibusoft mmdv -
http://www.dibusoft.com/



Dibusoft 使用了水平滚动图片加垂直滚动文字使用内容的幻灯式变换。它的主菜单则使用 JavaScript 实现 Lava Lamp 效果。
Jason Julien -
http://www.jasonjulien.com/



Web 设计师 Jason Julien 使用水平滚动的方式来显示各个栏目下的内容。
engage interactive -
http://www.engageinteractive.co.uk/


Juanid W. Hanif -
http://www.jwhanif.net/



这个位于纽约的 Web 设计师 Juanid W. Hanif 的网站给人的总体感觉很不错。
Omnitech incorporated -
http://www.omnitech-inc.com



Omnitech 的垂直垂直滚动式幻灯内容非常棒。
Quicksnapper -
http://www.quicksnapper.com/



Today’s Websnap 里的幻灯内容
Josh Smith -
http://www.joshsmith.ca/



不仔细看,还以为是 Flash 效果。
Qlear Interaction Design -
http://www.qlear.nl

大量的幻灯式内容,整体效果很漂亮。
Giant Creative -
http://madebygiant.com/



Tap Tap Tap -
http://www.taptaptap.com/


Hotel Oxford -
http://www.hotel-oxford.ro/



这个站的效果看上去象 Flash, 也拥有 Flash 一样的行为,然而却是 JavaScript。
单页式网站
以下几个站点的共同点就是大量使用滚动窗口,甚至有些滥用了。
Bryan Katzel -
http://www.webleeddesign.com/



Melissa Hie -
http://melissahie.com/



volll humane communication -
http://www.volll.com/



you love us -http://youlove.us/



Tomas Pojeta -http://www.pojeta.cz/



Carrot Creative -
http://carrotcreative.com/



Nofrks Design Studio -
http://www.nofrks.com/



Viget Labs -
http://www.teamviget.com/



Danny Blackmann -
http://dannyblackman.com/



my kinetic Kreations -
http://www.neftysworld.com/



DJ Folio - http://www.djfolio.com/



Jade Records -
http://www.jedarecords.it/



authenticstyle -
http://www.authenticstyle.co.uk/



Trashstars -
http://www.trashstars.com/



Designflavr -
http://www.designflavr.com/



h4×3d.com - http://www.h4×3d.com/


杂效
phpcli -
http://cliframework.com/



Vitamin j Kommunikation -
http://www.vitamin-j.de/



Komodomedia -
http://www.komodomedia.com/



Kyan - http://kyanmedia.com/



Green any Site -
http://www.greenanysite.com/



Playground Blues -
http://www.playgroundblues.com/



CSS moon - http://www.cssmoon.com



Creatividad -
http://2d2.es/creatividad/



Dragon Interactive -
http://dragoninteractive.com/



Marius Roosendaal -
http://www.mariusroosendaal.com/



paramore|red online marketing -
http://paramoreredd.com/



Pikaboo - Where Ideas Grow -
http://www.pikaboo.be/



Nebonmedia -
http://www.nebonmedia.com/



Helldesign -
http://helldesign.net/



以上部分资源来源:
http://www.kriesi.at/archives/50-websites-that-make-amazing-use-of-javascript

http://www.chinesefeng.com/article/js/javascript.htm

感谢他们的分享。

Ajax及Javascript实例资源网站:

AjaxRain有很多完美整合AJAX, CSS, DHTML 或 Javascript的实例,有一些Demo的确值得你去看一看,即使你不是网页设计(开发)师。

Ajax/Javascript实例:


2.Ajax Daddy

ajax-javascript-教程

Ajax Daddy收集了大量漂亮的Web2.0工具,其中一个使用的功能就是,在你把某个Ajax/Javascript实例应用在自己的网站上之前,你可以在它上面先看看效果演示。

Ajax/Javascript实例:


3.Mini Ajax

ajax-javascript-实例

MiniAJAX 是一个新生的网站,收集了少许 DHTML 和 AJAX 脚本, 它的代码片段风格非常实用。

Ajax/Javascript实例:

4.Ajaxian

ajax-javascript-源码

一个接近于门户类型的AJAX资源站点,包括Ajax示例收集,博客,论坛和教程等等。

Ajax/Javascript实例:


5.DHTML Goodies

ajax-javascript-教程
DHTML Goodies是一个收集了大量DHTML、Ajax脚本、Demo和教程的网站。脚本范围涵盖从导航菜单、窗口、日历到图片集合。
Ajax/Javascript实例:


6.Javascript Kit

ajax-javascript-资源

收集了大量的Javascript教程及脚本资源,当然也有DHTML、CSS和网页设计教程和一个设计师帮助论坛。

Ajax/Javascript实例:


7.Dynamic Drive

ajax-javascript-源码

一个我常去的 JavaScript和 CSS资源网站,即使你是初学者,也能找到DHTML、Javascript、客户端脚本详细的指导。

Ajax/Javascript实例:


8.DHTML Site

ajax-javascript

你能从DHTML Site找到大量游泳的AJAX及DHTML脚本及教程,脚本涵盖页面效果、工具技巧、拖拽式日历、窗口特效及图片集效果。

Ajax/Javascript实例:


9.Solutoire

ajax-javascript-资源

这个网站收集了相当多且很棒的javascript和ajax的实例及教程. 还有很多 jQuery、Scriptaculous、mootools等Javascript框架。

Ajax/Javascript实例:


10.DevSnippets

ajax-javascript-资源
收集了大量Ajax, javascript和CSS资源,在这里你可以提交自己喜欢的Ajax和Javascript实例,也可以为你喜欢的实例投票。

Ajax/Javascript实例:

阅读英文原文

原文链接:http://blog.bingo929.com/10-sources-ajax-javascript.html