王雨的JavaScript练习05---js实现动画效果(1)
大家复制源码自己看吧,就是通过DOM操纵元素的位置,然后用setTimeout进行循环。
html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="js/addLoadEvent.js"></script> <script src="js/positionMessage.js"></script> <script src="js/moveElement.js"></script> </head> <body> <p id="message">Whee!</p> <p id="message2">Whoa!</p> </body> </html>
js:
function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function() { oldonload(); func(); } } } function moveElement(elementID,final_x,final_y,interval) { if (!document.getElementById) return false; if (!document.getElementById(elementID)) return false; var elem = document.getElementById(elementID); var xpos = parseInt(elem.style.left); var ypos = parseInt(elem.style.top); if (xpos == final_x && ypos == final_y){ return true; } if (xpos < final_x){ xpos++ } if (xpos > final_y){ xpos-- } if (ypos < final_y){ ypos++ } if (ypos > final_y){ ypos-- } elem.style.left = xpos + "px"; elem.style.top = ypos + "px"; var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")" movement = setTimeout(repeat,interval); } function positionMessage() { if (!document.getElementById) return false; if (!document.getElementById("message")) return false; var elem = document.getElementById("message"); elem.style.position = "absolute"; elem.style.left = "50px"; elem.style.top = "100px"; moveElement("message",125,25,20); if (!document.getElementById("message2")) return false; var elem = document.getElementById("message2"); elem.style.position = "absolute"; elem.style.left = "50px"; elem.style.top = "50px"; moveElement("message2",125,125,20); } addLoadEvent(positionMessage);
带注释的js代码:
function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function() { oldonload(); func(); } } } function positionMessage() { //检查浏览器支持情况,检查文档里面是否有message ID if (!document.getElementById) return false; if (!document.getElementById("message")) return false; //获取message,并设置它具体的style值 var elem = document.getElementById("message"); elem.style.position = "absolute"; elem.style.left = "50px"; elem.style.top = "100px"; //调用moveElement函数,传入参数 moveElement("message",125,25,20); //同上 if (!document.getElementById("message2")) return false; var elem = document.getElementById("message2"); elem.style.position = "absolute"; elem.style.left = "50px"; elem.style.top = "50px"; moveElement("message2",125,125,20); } addLoadEvent(positionMessage); function moveElement(elementID,final_x,final_y,interval) { //检查浏览器支持情况 if (!document.getElementById) return false; if (!document.getElementById(elementID)) return false; //取得元素ID值并赋值给elem var elem = document.getElementById(elementID); //通过parseInt函数把style值转换成number类型 var xpos = parseInt(elem.style.left); var ypos = parseInt(elem.style.top); //判断xpos ypos是否和最终坐标相等 if (xpos == final_x && ypos == final_y){ return true; } //不相等时候,xpos ypos进行相应的自加一或自减一 if (xpos < final_x){ xpos++ } if (xpos > final_y){ xpos-- } if (ypos < final_y){ ypos++ } if (ypos > final_y){ ypos-- } //把xpos ypos赋值给elem的style.left .right,然后再加上px elem.style.left = xpos + "px"; elem.style.top = ypos + "px"; //通过自调用实现重复执行 var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")" movement = setTimeout(repeat,interval);
如果你可以成为海盗,为什么要加入海军呢?