请选择 进入手机版 | 继续访问电脑版
收藏本站腾讯微博新浪微博
点点网模板设计大赛 phpchina

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 用悬赏 三天解决问题 解决访问速度慢 论坛支持农历生日 - 给官方提建议

论坛活动及任务 归纳网站最新活动 地图任务 邮件更新任务:保护帐号安全

积分换实物,来参加蓝色理想积分兑换吧! 联系招聘客服 蓝色理想帮你找工作! 万元奖励等你拿——点点网模板设计大赛

查看: 2548|回复: 15

[原创]向flash看齐——简简单单玩动画效果[更新] [复制链接]

zcfg 楼主
帖子
169
体力
341
威望
5
发表于 2008-6-14 17:28:07 |显示全部楼层
简单动画函数:
优点:几百字节的代码即可实现缓冲动画效果,跨浏览器
缺点:一次只能应用于单个css属性(width/left/margin-Top)
ie6/ie7/ff/op下均ok,safari下未测试,应该也没问题。想实现多维度的动画(如width/height同时变化),调用两次即可。
  1. function ani(obj,what,value,callback){  //长CSS属性必须写成"margin-Top"的形式
  2.         var tid;
  3.         var ctrVal = getStyle(obj,what)||0;
  4.         var stp = (value-ctrVal)/7;
  5.         var _what = what.replace(/-/,"");
  6.         if(Math.abs(stp)>=1){
  7.                 obj.style[_what] = ctrVal + stp + "px";
  8.                 tid = setTimeout(function(){
  9.                         ani(obj,what,value,callback);
  10.                         }
  11.                 ,40);
  12.         }
  13.         else{
  14.                 if(Math.abs(stp)>0.2){
  15.                         obj.style[_what]=ctrVal + (stp>0?1:-1) + "px";
  16.                         tid=setTimeout(function(){
  17.                                 ani(obj,what,value,callback);
  18.                                 }
  19.                         ,40);
  20.                 }
  21.                 else{
  22.                         obj.style[_what]=value+"px";
  23.                         if((typeof callback).toLowerCase() =="function")
  24.                                 callback();
  25.                 }
  26.         }
  27. }
复制代码


拓展1:

 提示:您可以先修改部分代码再运行


此例中,连点左键时会出现抖动现象,是因为多次执行结果作用与同一个元素上造成。为了保持函数短小,我未作此判断机制,使用时请自行做逻辑判断。

拓展2:

 提示:您可以先修改部分代码再运行



复杂动画函数:
优点:调用一次即可实现多个“维度”的动画效果
  1. function animate(obj,params,speed,callback){
  2.         this.obj = (typeof obj).toLowerCase()=='object'?obj:$(obj);
  3.         this.rate = (typeof speed).toLowerCase() =="string"?({slow:1/7,normal:1/5,fast:1/3}[speed]):0;
  4.         this.isCB = ((typeof callback).toLowerCase() =="function");

  5.         var __self  = this ,
  6.         flag=[0,0,0,0] , //用以确定动画时候完成
  7.         interval = 40 ,
  8.         timerID = null ;

  9.         this.start = function(){
  10.                 this.loop();
  11.         }

  12.         this.loop = function(){
  13.                 var k = -1;
  14.                 for(var attr in params){
  15.                         k++;
  16.                         if(flag[k]==1)
  17.                                 continue; //如果完成,跳过该属性
  18.                         var crtDis = getStyle(__self.obj,attr);
  19.                         var togoDis = params[attr] - crtDis;
  20.                         var step = togoDis*__self.rate;
  21.                         if( Math.abs(step)>=1 ){
  22.                                 __self.obj.style[attr] = crtDis + step + "px";
  23.                         }
  24.                         else{
  25.                           if(Math.abs(step)>__self.rate){ //即当togoDis<1/rate px时
  26.                             __self.obj.style[attr] = crtDis + (togoDis>0?1:-1)+ "px";
  27.                           }
  28.                           else{
  29.                             __self.obj.style[attr] = params[attr] + "px";
  30.                                 flag[k] = 1;
  31.                                 if(flag.toString().indexOf("0")==-1){
  32.                                   if(__self.isCB)
  33.                                     callback.call(__self.obj);
  34.                                   return false; // 终止程序
  35.                                 } //if
  36.                           } //else
  37.                         } //else
  38.                 } //for
  39.                 timerID = setTimeout(arguments.callee,interval);
  40.         } //loop
  41. }
复制代码


拓展:

 提示:您可以先修改部分代码再运行


此例在IE6/IE7/op下的效果较好,FF下不流畅,大概是由于程序效率和FF的js处理效率不高的原因。

[ 本帖最后由 zcfg 于 2008-6-16 17:58 编辑 ]
西部数码顶级域名注册商39元抢注!
tmulmt 

墨墨无雨

银牌会员

帖子
2100
体力
2078
威望
0
发表于 2008-6-14 19:50:32 |显示全部楼层
Thank you.

期待下文。
租服务器,上51IDC | [长沙]招聘:PHP经理10K/WEB前端6K/PHP开发6K

使用道具 举报

帖子
45
体力
110
威望
0
发表于 2008-6-15 00:22:09 |显示全部楼层
不错的效果,期待改进,比方说加入文字。
Discuz版版

使用道具 举报

帖子
3
体力
16
威望
0
居住地
江苏省 南京市
发表于 2008-6-15 17:32:52 |显示全部楼层
原帖由 Nicollelord 于 2008-6-15 00:22 发表
不错的效果,期待改进,比方说加入文字。

lz什么时候续啊?

使用道具 举报

kf2s 
帖子
83
体力
362
威望
0
居住地
广东省 深圳市
发表于 2008-6-16 14:36:53 |显示全部楼层

 提示:您可以先修改部分代码再运行



如何把这个1234修改到图片上面呢?像 www.xyqb.net 这个效果!高手请指教谢谢

[ 本帖最后由 kf2s 于 2008-6-16 14:38 编辑 ]
www.xyqb.net

使用道具 举报

zcfg 楼主
帖子
169
体力
341
威望
5
发表于 2008-6-16 18:13:42 |显示全部楼层
原帖由 kf2s 于 2008-6-16 14:36 发表
如何把这个1234修改到图片上面呢?像 www.xyqb.net 这个效果!高手请指教谢谢


你和三楼说的是一回事 自己动手改改html/css就ok了

 提示:您可以先修改部分代码再运行


[ 本帖最后由 zcfg 于 2008-6-16 18:15 编辑 ]

使用道具 举报

kyllen 
帖子
268
体力
1084
威望
0
发表于 2008-8-28 08:28:45 |显示全部楼层
效果很不错,MARK

使用道具 举报

Andy88

银牌会员

帖子
2590
体力
1823
威望
0
发表于 2008-8-28 10:09:55 |显示全部楼层
最终效果里连续点击的话出现抖动.
Thr's an I in happiness, thr's no Y in happiness

使用道具 举报

莲心伊人

银牌会员

帖子
346
体力
1252
威望
0
居住地
广东省 深圳市
发表于 2008-8-28 10:17:05 |显示全部楼层
最终代码有问题各位兄弟,慢点点就不会有什么问题,要是连续快点,就会出现严重的抖动,没有办法看了,呵呵,希望能纠正

使用道具 举报

设计假装

初级会员

帖子
125
体力
188
威望
0
居住地
广东省 广州市
发表于 2008-8-28 11:34:18 |显示全部楼层
感觉JS比较酷的 收藏了 谢谢LZ
好好学习,天天向上!

使用道具 举报

帖子
86
体力
207
威望
0
居住地
浙江省 杭州市
发表于 2008-8-28 11:36:21 |显示全部楼层
不错收藏一下
www.designnull.com

使用道具 举报

帖子
24
体力
116
威望
0
发表于 2008-8-28 12:59:40 |显示全部楼层
真棒啊 收藏啦

使用道具 举报

暗房采光师

银牌会员 手机认证 

帖子
120
体力
2514
威望
0
居住地
北京市 朝阳区
发表于 2008-8-28 13:26:58 |显示全部楼层
不赖~学习了~
好久不来蓝色了。很久不见。不做一个孤独患者。

使用道具 举报

shore 
帖子
74
体力
532
威望
0
发表于 2008-8-28 14:10:02 |显示全部楼层
而且在事件没完成就点其他图片会出现前一个图片不能回到初始位置的情况

使用道具 举报

帖子
137
体力
479
威望
0
居住地
广东省 深圳市
发表于 2008-8-28 14:54:26 |显示全部楼层
ie7,好像有问题,点击后一直在抖动!
http://updayday.com

使用道具 举报

kgzhw 
帖子
8
体力
29
威望
0
居住地
山西省 太原市
发表于 2008-9-7 10:15:32 |显示全部楼层
谢谢

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|安久科技提供CDN|blueidea.com ( 京ICP备05002321号 )  

GMT+8, 2012-2-13 08:01 , Processed in 0.133259 second(s), 10 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部