上周五抽空实现了一下谷歌首页(其实是韩国google先搞的)的动画效果,感觉挺有意思,在这里和大家分享下。jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
这个效果的思路蛮有趣的,是一个类似于我们小时候翻书动画(也叫走马灯?)的效果,将一张大的png图片每次显示一部分。jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
说明一下,我的实现没有google的那样精致,它最后还有一个返回一点的效果。我为了简单,省略了,呵呵。jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
首先,这是google用的素材图片:jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
这是我的素材图片:jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
区别就在于我把最后那条边裁了,就没有那一小点回退的效果了jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
然后是容器的css:jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
<style type="text/css">jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        .animator_containter
{}{jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            margin
: 0.5em auto; jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            background
: transparent url(ani.png) no-repeat scroll 0px 0px ; jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            width
: 52px; /*每次显示部分png图片的宽度*/jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            height: 37px; /*每次显示部分png图片的高度*/jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            cursor: pointer; jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            -moz-background-clip
: -moz-initial; jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            -moz-background-origin
: -moz-initial; jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            -moz-background-inline-policy
: -moz-initial;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
       
}jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
</style>
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
然后是namespace和常用方法:jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
/**jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
* @author wjjinjæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
*/jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
if (typeof(geekeesjs) == "#ff0000")jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            _geekees
= geekeesjs = {};jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
function $() {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
var elements = new Array();jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
for (var i = 0; i < arguments.length; i++) {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
       
var element = arguments;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
       
if (typeof element == 'string')jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            element
= document.getElementById(element);jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
       
if (arguments.length == 1)jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
return element;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        elements.push(element);jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
return elements;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
}
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
接着是一个Timer的类,用来在oo的编程方式下管理setTimeout和setInterval,这个类真的很实用,是偶尔发现的,出处忘了,对作者说个不好意思。jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
//Updated 4/18/2003: Footprint decreased, minor code improvements.jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
//
Updated 5/3/2003: Minor comment clarification; no code changes.jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
//
Updated 5/10/2003: Minor code improvements.jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
//
The constructor should be called withjæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
//
the parent object (optional, defaults to window).jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
function Timer() {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
this.obj = (arguments.length)?arguments[0]:window;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
return this;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
}
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
// The set functions should be called with:jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
//
- The name of the object method (as a string) (required)jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
//
- The millisecond delay (required)jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
//
- Any number of extra arguments, which will all bejæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
//
passed to the method when it is evaluated.jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
Timer.prototype.setInterval
= function(func, msec) {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
var i = Timer.getNew();jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
var t = Timer.buildCall(this.obj, i, arguments);jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    Timer.set.timer
= window.setInterval(t,msec);jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
return i;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    Timer.prototype.setTimeout
= function(func, msec) {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
var i = Timer.getNew();jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    Timer.buildCall(
this.obj, i, arguments);jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    Timer.set.timer
= window.setTimeout("Timer.callOnce("+i+");",msec);jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
return i;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
}
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
// The clear functions should be called withjæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
//
the return value from the equivalent set function.jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
Timer.prototype.clearInterval
= function(i) {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
if(!Timer.set) return;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    window.clearInterval(Timer.set.timer);jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    Timer.set
= null;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    Timer.prototype.clearTimeout
= function(i) {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
if(!Timer.set) return;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    window.clearTimeout(Timer.set.timer);jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    Timer.set
= null;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
}
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
// Private datajæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
Timer.set
= new Array();jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
Timer.buildCall
= function(obj, i, args) {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
var t = "";jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    Timer.set
= new Array();jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
if(obj != window) {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        Timer.set.obj
= obj;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        t
= "Timer.set["+i+"].obj.";jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    t
+= args[0]+"(";jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
if(args.length > 2) {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        Timer.set[
0] = args[2];jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        t
+= "Timer.set["+i+"][0]";jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
       
for(var j=1; (j+2)<args.length; j++) {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            Timer.set[j]
= args[j+2];jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            t
+= ", Timer.set["+i+"]["+j+"]";jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    t
+= ");";jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    Timer.set.call
= t;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
return t;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
}
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
Timer.callOnce
= function(i) {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
if(!Timer.set) return;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    eval(Timer.set.call);jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    Timer.set
= null;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
}
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
Timer.getNew
= function() {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
var i = 0;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
while(Timer.set) i++;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
return i;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
}
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
准备工作做完,接下来开始代码主题了,其实还是挺简单的,递归调用而已,只不过是oo的方法实现,看起来比较那个,呵呵。注释是用英文写的,看懂应该问题不大。jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
<script type="text/javascript">jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
       
//***************************Class _geekees.Animator********************************jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
       
//initializejæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
       
if (typeof(_geekees.Animator) == "#ff0000")jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            _geekees.Animator
= {};jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
       
elsejæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            alert(
"Animator is already set!");jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
    jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
       
//constructorjæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        _geekees.Animator = function( containerIdjæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                                        , widthjæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                                        , heightjæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                                        , initialPosXjæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                                        , initialPosYjæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                                        , motionTimejæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                                        , stepXjæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                                        , stepY )
{jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                    jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.container = $( containerId );jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.container.style.width = width + "px";jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.container.style.height = height + "px";jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.container.style.backgroundPosition = initialPosX + "px " + initialPosY + "px";jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.startPosX = 0;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.startPosY = 0;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.endPosX = 0;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.endPosY = 0;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.isForwardX = true;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.isForwardY = true;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.motionTime = motionTime;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.timer = new Timer( this );//initial the Timer classjæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.stepX = stepX;//each time moving stepjæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.stepY = stepY;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
       
//move methodjæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        _geekees.Animator.prototype.move = function() {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
if (this.isForwardX)  {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
               
if (this.startPosX < this.endPosX) {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                   
this.timer.setTimeout('move', this.motionTime);jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                   
this.startPosX += this.stepX;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
else {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
               
if (this.startPosX > this.endPosX) {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                   
this.timer.setTimeout('move', this.motionTime);jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                   
this.startPosX -= this.stepX;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
if (this.isForwardY) {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
               
if (this.startPosY < this.endPosY) {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                   
this.timer.setTimeout('move', this.motionTime);jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                   
this.startPosY += this.stepY;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
else {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
               
if (this.startPosY > this.endPosY) {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                   
this.timer.setTimeout('move', this.motionTime);jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                   
this.startPosY -= this.stepY;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
//set the container statusjæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.container.style.backgroundPosition = this.startPosX + "px " + this.startPosY + "px";jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
       
//the method which to be calledjæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        _geekees.Animator.prototype.animate = function( startX, endX, startY, endY ) {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.startPosX = startX;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.endPosX = endX;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.startPosY = startY;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.endPosY = endY;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.isForwardX = startX <= endX;//determine whether start position is larger than end positionjæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.isForwardY = startY <= endY;jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
                        jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
           
this.move();jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
       
//***************************End of Class _geekees.Animator********************************jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
       
/******************test*******************/jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
       
function go() {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            ani.animate(
0, -208, 00 );jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
       
function back() {jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
            ani.animate(
-208, 000 );jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        }
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
       
var ani = new _geekees.Animator( 'divAni', 52, 37, 0, 0100 ,52, 0);jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
   
</script>
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
最后是那个container,也就是一个div:jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
<div id="divAni" class="animator_containter" onmouseover="go();return false;" onmouseout="back();return false;">jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
        jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG
</div>
jæ/Vr‰aԞwww.netcsharp.cnÇ{’©%¢ÄØG