您的位置: 首页 > 技术文档 > 网页制作 > 解读javascript的计时器 II
认识Javascript数组 回到列表 Data URI 和 MHTML
 解读javascript的计时器 II

作者:dishuipiaoxiang 时间: 2009-08-19 文档类型:原创 来自:Denis'Blog

第 1 页 昂贵计算的处理
第 2 页 中央计时器控件
第 3 页 异步测试
第 4 页 总结

2、中央计时器控件

在使用计时器时,出现了一个问题--在处理大量计时器时如何管理它们。在动画处理中你尝试去同步处理大量属性时就尤其重要,你需要一种方法去管理它们。

你的计时器有一个核心的控制将赋予你很大的权力和灵活性,即:

  • 在某个时刻每个页面仅一个计时器运行;
  • 你可以随时暂停和继续计时器;
  • 移除回调函数不过是小菜一碟。

你也必需认识到,增加同步计时器的数量有可能增加浏览器垃圾回收出现的可能性。一般来说,浏览器在搜寻并尝试绑定任何零碎的东西(删除未使用的变量、对象等)。因为它们通常在正常的Javascript引擎管理之外(通过其它线程),这时定时器的问题就尤为严重。一些浏览器能处理这种情况而另外一些浏览器会导致长时的垃圾回收循环出现。你也许会注意到这种问题--当你在一个浏览器中看到的是漂亮、平滑的动画,而在另一个浏览器中动画是走走停停完成的。减少计时器同步应用的数量对此大有裨益(这也是现代浏览器引入类似中央计时器控件构件的原因)。

让我们来看一个例子,我们有多个函数,这些函数分别对单个属性产生动画效果,但它们被一个单独的计时器函数管理。

用计时器队列控制多重动画:

<div id="box" style="position:absolute;">Hello!</div>

var timers = {
        timerID: 0,
        timers: [],
        start: function(){
    if ( this.timerID )
      return;
    (function(){
      for ( var i = 0; i < timers.timers.length; i++ )
        if ( timers.timers[i]() === false ) {
          timers.timers.splice(i, 1);
          i--;
      }
      timers.timerID = setTimeout( arguments.callee, 0 );
    })();
  },
 stop: function(){
   clearTimeout( this.timerID );
   this.timerID = 0;
  },
 add: function(fn){
   this.timers.push( fn );
   this.start();
 }
};
var box = document.getElementsById("box"), left = 0, top = 20;
timers.add(function(){
 box.style.left = left + "px";
 if ( ++left > 50 )
  return false;
});
timers.add(function(){
 box.style.top = top + "px";
 top += 2;
 if ( top > 120 )
  return false;
});

在这我们创建了一个中央控制结构。我们可以添加新的计时器回调函数,并可停止和开始它们的执行。此外,回调函数有能力在任何时候删除自己,只需简单的返回“false”即可(这比通常的clearTimeout模式更容易),让我们逐一分析代码看看它是如何工作的。

起初,所有回调函数连同当前计时器的ID(timers.ID)被存储在一个中央数组中(timers.timers)。核心内容在start()函数内部,在这里我们需要确认得是已没有计时器在运行,如果是那样,就开始我们的中央计时器。

计时器包含一个循环,它遍历所有的回调函数,并按顺序执行它们,它还检查回调函数返回的值,如果是“false”,将从执行中移除。事实证明,这是计时器管理非常简单的方式。

有一点非常重要,用这种方式组织计时器会确保回调函数总是按顺序执行,那样,正常的计时器总是得不到保证(浏览器一个接一个的选择执行)。

定时器的这种组织方式对于大型应用程序或任何形式的真正的Javascript动画至关重要,当我们讨论如何创建跨浏览器动画时,有一种解决方案肯定有助于将来任何形式的应用开发。

出处:Denis'Blog
责任编辑:bluehearts

上一页 昂贵计算的处理 下一页 异步测试

◎进入论坛网页制作WEB标准化版块参加讨论,我还想发表评论

作者文章
解读javascript的计时器 I
使用jQuery改进文件上传控件
自适应css布局——流动布局新时代
图像替换新技术:状态域方法
关键字搜索 常规搜索 推荐文档
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
周大福“敬•自然”设计大赛开启
国际体验设计大会7月将在京举行
中国国防科技信息中心标志征集
云计算如何让安全问题可控
云计算是多数企业唯一拥抱互联网的机会
阿里行云
云手机年终巨献,送礼标配299起
阿里巴巴CTO王坚的"云和互联网观"
1499元买真八核 云OS双蛋大促
首届COCO桌面手机主题设计大赛
栏目最新 栏目最新列表
浅谈JavaScript编程语言的编码规范
如何在illustrator中绘制台历
Ps简单绘制一个可爱的铅笔图标
数据同步算法研究
用ps作简单的作品展示页面
CSS定位机制之一:普通流
25个最佳最闪亮的Eclipse开发项目
Illustrator中制作针线缝制文字效果
Photoshop制作印刷凹凸字体
VS2010中创建自定义SQL Rule
>> 分页 首页 前页 后页 尾页 页次:2/41个记录/页 转到 页 共4个记录

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
网站可用性测试及优化指南
《写给大家看的色彩书1》
《跟我去香港》
众妙之门—网站UI 设计之道
《Flex 4.0 RIA开发宝典》
《赢在设计》
犀利开发—jQuery内核详解与实践
作品集 更多内容

杂⑦杂⑧ Gold NORMANA V2