本帖最后由 rao3324180 于 2010-06-27 05:43:11 编辑

解决方案 »

  1.   

    加个 elem 是为了区别 是哪个元素的 setTimeout 以便后面 clearTimeout 
      

  2.   

    同一个元素移动到另一个地方去
    同一个元素同时移动到两个不同的地方去头一句话的意思,是指这个函数本来的作用,是把传递给它的待操作元素移动到另一个地方去。第二句话的意思,是说,当快速调用这个函数时,由于它并未判断上一次的移动是否完成,就会直接执行,因此,就会导致在上一次移动完成之前又开始了一个新的移动,如果两个移动的目标不同,结果就会造成把同一个元素移动到了两个不同的地方。(这听来很有点象早期利用游戏BUG刷钱嘛,呵呵)
      

  3.   

    elem.movement = setTimeout(repeat,interval);
    这条语句前面为什么要加elem?这个,要看上面函数(写在下面)开始部分啊,那里利用.movement来作为标记变量嘛。
    function moveElement(elementID,final_x,final_y,interval){
        var elem = document.getElementById(elementID);
    if(elem.movement){  //如果上一个动作仍在执行,对象是movement的状态,则清除事件
            clearTimeout(elem.movement);
        }

    elem.movement = setTimeout(repeat,interval);///然后,在函数末尾,设置了movement的状态
    }
    所以,简单说,它就是个用来判断状态的标记变量。
      

  4.   

    那movement后面为什么还要加elem
      

  5.   

    elem.movement = setTimeout(repeat,interval);这里的elem可以看成一个对象,在调用方法这样就比较好理解了
      

  6.   

    movement后面没有加elem啊。
    你说的是下面这两处吗:
    moveElement(elementID,final_x,final_y,interval){
    var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
    它们是moveElement和elementID,一个是函数,一个是参数。
    重点是这个:
    var elem = document.getElementById(elementID);
    elem就是代表通过elementID参数指定的元素对象。另外要修正一下我在上面说的:
    elem.movement = setTimeout(repeat,interval);///这个是存储了settimeout返回的事件句柄,不是简单的标记变量,算是事件的标记变量吧。