DDjs发布:自然加速滑动

 

 

前两天在做一个JavaScript小游戏的时候,用到不少滑动效果,可能jQuery或者哪些库也有,但我还是自己试着写了一个通用的“自然滑动”函数,即初速为零的恒加速滑动,并且滑动的效果可以是 展开/收拢 或者 移动。

 

 

先看看实现效果:

 

 

下面先看一下函数,我会就其中的某些技术细节稍微解释一下,大家有什么不同意见可以一起讨论~

 

Code

 

 

(关于函数的用法这里就不赘述了,相信在各个著名的库中都可以找到比这个优越许多的代码。)

 

 

其中涉及到三个比较重要的技巧,这里跟大家分享一下:

 

将自己的函数“打包”

 

首先看看1、2行,这是JavaScript一种“打包”的方式。通过这种方法,我们可以将自己写的一些库和其他引用库分割开,而不用担心函数或者变量命名重名的问题。

 

你可能会想到当我们要引用上述函数的时候有多么麻烦,我们需要书写 "DDjs.slide.naturalSlide" 这么长的一串才可以调用到这个函数。不用紧,你可以给它做“瘦身”:

slide = DDjs.slide.naturalSlide;

 

为原函数声明了一个引用,这样就可以通过这个引用(slide)调用函数了。

 

多态及兼容性

 

16、17行变量赋值的方式,关键在于“||”的用法。这一种方法常用于一些不确定的场合,经常用于解决浏览器兼容性问题。此处用于检测形参是否传入,如果没有传入,则使用默认值。

 

解决浏览器兼容问题的用法我在《JavaScript DOM笔记:获取及操作元素》一文中已经提到。

 

循环体中的闭包

 

21~31行,“闭包”的一种重要应用。首先明确一个机制:

 

“闭包范围内允许使用父函数中的变量,但提供的值并非该变量创建时的值,而是在父函数范围内的最终值。”

 

于是在for或者while等循环体中,如果出现函数闭包并且在闭包内使用了循环变量,此时的循环变量并不能取到你想要的值。于是我们必须创建另一个“非循环”的范围,并且在这个范围内捕获循环变量(上述函数中另用局部变量step进行存储),再将捕获的值传入下一个函数闭包之中。

 

 

欢迎交流前端开发技术!

posted @ 2008-07-27 11:40 东捣CY 阅读(1719) 评论(14)  编辑 收藏 网摘 所属分类: JavaScript

  回复  引用  查看    
#1楼2008-07-27 13:43 | 李福拉      
感觉像匀速运动
  回复  引用  查看    
#2楼[楼主]2008-07-27 14:06 | 东捣CY      
@李福拉

稍微修改了一下传入参数,现在可能会明显一点了

  回复  引用  查看    
#3楼2008-07-27 14:38 | Q.Lee.lulu      
--引用--------------------------------------------------
李福拉: 感觉像匀速运动
--------------------------------------------------------

  回复  引用  查看    
#4楼2008-07-27 15:17 | 文宇祥      
写成这样会比较简洁一点,用闭包函数的参数将外部变量拷贝引用到闭包内部

22 (function(step){
23 var temp = setTimeout(function(){
24 // 设t为总时间,T为当前时刻,则T = itv * step
25 // 恒加速运动 diff = 1/2 * a * (t * t)
26 // s = 1/2 * a * (T * T) = diff / (t * t) * (itv * step) * (itv * step)
27 var s = diff * step * step * itv * itv / t / t;
28 which.style[what] = (startNum + s) + 'px';
29 }, itv * step );
30 handles.push(temp);
31 })(i);

  回复  引用  查看    
#5楼2008-07-27 16:06 | BAsil      
不错,支持
  回复  引用  查看    
#6楼2008-07-27 16:19 | 侯垒      
不错.
  回复  引用  查看    
#7楼2008-07-27 20:01 | 留恋星空      
可以知道楼主都参考了那些资料加以归纳总结的么?
  回复  引用  查看    
#8楼[楼主]2008-07-27 20:11 | 东捣CY      
@留恋星空

我正在看《精通JavaScript》……

作者(jQuery的作者)的编程风格和书里提及的技术细节经常能给人以启示。

我在打广告么……


  回复  引用  查看    
#9楼[楼主]2008-07-27 20:14 | 东捣CY      
@文宇祥

嗯,确实! 多谢提醒!

  回复  引用  查看    
#11楼2008-07-28 07:49 | 小生      
效果好像...

其實我實現加速很簡單
n=1;
function repeatFun(){
n+=200; //200看效果﹐隨時改變
window.setTimeout(repeatFun,n);
}

  回复  引用    
#12楼2008-07-28 09:28 | junstyle1[未注册用户]
--引用--------------------------------------------------
小生: 效果好像...

其實我實現加速很簡單
n=1;
function repeatFun(){
n+=200; //200看效果﹐隨時改變
window.setTimeout(repeatFun,n);
}
--------------------------------------------------------

你这是减速了吧~

  回复  引用  查看    
#13楼2008-07-28 16:15 | 火无极      
貌似写复杂了下,不过还是顶下
  回复  引用  查看    
#14楼2008-08-19 16:55 | 刘长锋      
挺好
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1252378




相关文章:

相关链接: