posts - 22, comments - 61, trackbacks - 11, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

 Script.Aculo.Us 开发系列是我最近的一些新的发现,在这个系列中,我将会和大家一起分享自己在Script.Aculo.Us中的开发经验,由于目前中文的相关资料还很少,希望能尽绵薄之力吧,欢迎大家参与讨论.

现在开始 

 Script.Aculo.Us框架是基于Prototype框架的一个非常优秀的开源Ajax框架,如果对Prototype框架还不是很了解.可以参考我的Prototype1.5.0 APIs这篇文章,在这篇文章里,我翻译了1.5.0版本的官方文档,还做了一个简单的API搜索,希望能对你的开发有些益处.

Script.Aculo.Us里面封装了许多控件:大家常见的AotuComplete,Accordion,Slider等,很多的动画效果,还有拖拽,你只需要简单的几行代码就可以实现上面的效果.

 顺便提下,框架的名字有些奇怪,其实就是因为他们的官方网站就是Http://Script.Aculo.Us,和Prototype一样,MIT的人才们的杰作.所以要开始起步的话自然是县到官方网站了去下载最新版本的代码了,下载完的代码解压会有lib,src,test文件夹和一些没有后缀的文件夹,lib文件夹中会有支持当前版本的Prototype.js,src文件夹中会有7个js的文件,将上述的8个js文件提取,放在你的项目中,就一切OK了.引用到文件中的方法

<script type="text/javascript" src="lib/prototype.js"></script>
<script type="text/javascript" src="lib/scriptaculous.js?load=effects,controls"></script>

在路径后面load=effects,controls意思是只加载effects.js和controls.js两个文件,这样,用不到的模块就不会加载,节省了网络流量,如果不添加load,默认的会加载builder,effects,dragdrop,controls,slider5个文件,也可以直接每个文件单独加载js文件,如:

<script type="text/javascript" src="lib/prototype.js"></script>
<script type="text/javascript" src="lib/effects.js"></script>

上面的代码直接加载effects.js, 程序运行的时候也不会出问题.再写一行js

<script type="text/javascript">
function puff()
{
    
var oAnimation=new Effect.Puff("imgPuff");
}

Event.observe($('btnTest'),'click',puff);
</script>

运行一下,一个非常酷的效果就出来了.注意所写的代码要在window.onload事件后才可以运行,否则会报错,原因很简单,只有在window.onload之后DOM才初始化.

这样类似的类还有Appear,Fade,BlindUp,BlindDown,SwitchOff,DropOut,Shake,SlideDown,SlideUp,Squish,Grow12种,这些动画在Script.Aculo.Us中叫做组合动画(Combine Effects),是相对于核心动画(Core Effects),CoreEffects在下篇中会由介绍.

使用参数

在每个类的构造函数中,第一个参数是应用效果的元素ID,第二个是一个Json对象,默认为

Effect.DefaultOptions = {
  transition: Effect.Transitions.sinoidal,
  duration:   
1.0,   // seconds
  fps:        60.0,  // max. 60fps due to Effect.Queue implementation
  sync:       false// true for combining
  from:       0.0,
  to:         
1.0,
  delay:      
0.0,
  queue:      'parallel'
}
参数说明
  •  transition:关于算法 Enum类型:sinoidal(默认),linear(线性),reverse(1-x函数),flicker,wobble,pulse,none,full ,这些参数其实都是一个关于pos的函数,返回值在0~1之间
  •  duration: 动画持续时间:默认1.0秒
  • fps:每秒帧数,默认60
  • sync:异步,在Parallel动画时设置为true,一般为false
  • from /to:始末偏移比值
  • delay:执行动画之前停留事件
  • queue:'parallel'
new Effect.Puff("imgPuff",{delay:1.0,duration:1.5});

 执行动画之前停留1.0s,整个动画持续1.5s

上面的参数适用与所有的动画(包括Core Effects),需要说明的是对于某种动画都由独有的一些参数,在使用的时候请参阅源代码

效果实现

Effect将所有的动画转换为始末状态,不管是颜色,像素,透明度,首先计算出动画偏移量offset(s),根据持续事件和每秒帧数计算出.
offsetPerFrequency=offset/(duration*fps)
CurrentState(pos)=OriginalState+(OriginalState-FinnalState)*transition(pos)
在每帧中调用了update()方法重写视图, 这样动画就出来了

Feedback

#1楼   回复  引用    

2007-09-12 22:20 by LovelyTigger[未注册用户]
可不可以介绍点Ext啊?

#2楼   回复  引用  查看    

2007-09-13 00:03 by silverlightfans      
很早就有这个了,非常不错的东东,asp.net ajax相比太垃圾了

#3楼   回复  引用  查看    

2007-09-13 00:14 by Cat Chen      
这样大写名字其实并不好看,个人认为Scriptaculous或者Script.aculo.us比较顺眼一些,因为这样能看出是Script的一个人造派生词。

#4楼[楼主]   回复  引用  查看    

2007-09-13 07:40 by Hafeyang      
@LovelyTigger
马上奉上

@silverlightfans
Asp.net Ajax 也不错

@Cat Chen
言之有理

#5楼   回复  引用  查看    

2007-09-13 08:42 by 雨中流泪      
@silverlightfans
ASP.Net垃圾?ajax垃圾?
你知道什么是AJAX吗?
那么多的框架就是为了快速实现AJAX技术而已.
ASP.Net不是和js一个层面上的东西.
兄弟,多学学吧.

#6楼   回复  引用  查看    

2007-09-13 09:06 by 老刘.      
提供一个功能演示的地址:
http://wiki.script.aculo.us/scriptaculous/show/CombinationEffectsDemo" target="_new">http://wiki.script.aculo.us/scriptaculous/show/CombinationEffectsDemo

rails的内置框架,一起学习:)

#7楼   回复  引用  查看    

2007-09-13 09:21 by 大雾      
@雨中流泪:

@silverlightfans 说的是 "asp.net ajax" 框架,他没有拿 asp.net 和 ajax比较

#8楼[楼主]   回复  引用  查看    

2007-09-13 09:39 by Hafeyang      
@老刘
官方网站中有许多的Demo,不知道怎么打不开,不知道大家是否这样

#9楼[楼主]   回复  引用  查看    

2007-09-13 09:43 by Hafeyang      
@老刘
我自己做的一个Demo
http://www1.qcxy.hb.cn/qphy/Script_Aculo_Us/Effects.html" target="_new">http://www1.qcxy.hb.cn/qphy/Script_Aculo_Us/Effects.html,主要是演示Combine Effects
之前我也看到了这个页面,前几天怎么又没有找到了,
谢了

#10楼[楼主]   回复  引用  查看    

2007-09-13 17:01 by Hafeyang      
@Cat Chen
再次回复,你了解这个框架比我深,关注你的博客很久了,望指教啊

#11楼   回复  引用    

2008-03-13 17:09 by 俺才疏学浅[未注册用户]
对下面这段字看不懂:S,还是找纯英文的看一下吧
===================
运行一下,一个非常酷的效果就出来了.注意所写的代码要在window.onload事件后才可以运行,否则会报错,原因很简单,只有在window.onload之后DOM才初始化.
===================

#12楼[楼主]   回复  引用  查看    

2008-03-13 22:13 by Hafeyang      
其实这段回头来想想不是很严谨
确切的说只要DOM加载后就可以执行对DOM操作
这样应该也可以
<div id="div1"></div>
<!-- .... -->
<script>new Effect.Puff("div1");</script>



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

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

0 891167




相关文章:

相关链接: