首页 > 其他 > 详细

【DOM编程艺术】positionMessage函数和moveMessage函数

时间:2014-04-22 17:06:25      阅读:642      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>position</title>
</head>

<body>
<p id=‘message‘>Whee!</p>
<script>
addLoadEvent(positionMessage);
addLoadEvent(moveMessage);
function positionMessage(){
    var elem = document.getElementById(message);
    elem.style.position = absolute;
    elem.style.left = 50px;
    elem.style.top = 100px;
}
function moveMessage(){
    var elem = document.getElementById(message);
    elem.style.left = 200px;
}
</script>
</body>
</html>
bubuko.com,布布扣

如果让moveMessage()函数在页面加载时运行,这个元素的位置将立刻发生变化----由positionMessage函数给出的原始位置会被立刻覆盖

导致元素的显示位置立刻发生变化的根源是Javascript太有效率了:函数一个接一个地执行,其间根本没有我们所能察觉的间隔。

二、创造时间间隔

setTimeout("function",interval);   

setTimeout有两个参数,第一个参数通常是一个字符串,其内容是将要执行的那个函数的名字; 第二个参数是一个表示时间间隔的数值

在绝大多数时候,把这个函数调用赋值给一个变量将是一个好主意:variable=setTimeout(‘function‘,interval);

如果想取消某个正在排队等待执行的函数,就必须事先像上面这样把setTimeout函数的返回值赋给一个变量。

取消队列   clearTimeout(variable);  ....需要一个参数---保存着某个setTimeout函数调用返回值的变量。

修改positionMessage函数,让它在5秒之后才去调用moveMessage函数:

bubuko.com,布布扣
<script>
addLoadEvent(positionMessage);
function positionMessage(){
    var elem = document.getElementById(message);
    elem.style.position = absolute;
    elem.style.left = 50px;
    elem.style.top = 100px;
    moveMent = setTimeout(moveMessage(),5000);//相隔5秒执行moveMessage函数.....在5秒钟的时间里,随时可以clearTimeout(movement)取消这一跳跃行为......
}
function moveMessage(){
    var elem = document.getElementById(message);
    elem.style.left = 200px;
}

</script>
bubuko.com,布布扣

解析:movement变量对应着在positionMessage函数里定义的setTimeout调用。它是一个全局变量,这意味着那个“跳跃”行为可以在positionMessage函数以外的地方被取消。

三、真正的动画效果是一个渐变的过程

bubuko.com,布布扣
<script>
addLoadEvent(positionMessage);
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; movement = setTimeout(moveMessage(),10); } function moveMessage(){ var elem = document.getElementById(message); var xpos = parseInt(elem.style.left); var ypos = parseInt(elem.style.top); if(xpos == 200 && ypos ==100){ return true; } if(xpos < 200){ xpos++; } if(xpos > 200){ xpos--; } if(ypos > 100){ ypos++; } if(ypos < 100){ ypos--; } elem.style.left = xpos +px; elem.style.top = ypos +px; movement=setTimeout(moveMessage(),10); } function addLoadEvent(func){ var oldEvent = window.onload; if(typeof window.onload != function){ window.onload = func; }else{ window.onload = function(){ oldEvent(); func(); } } } </script>
bubuko.com,布布扣

moveMess()函数使得message元素以每次1像素的方式在浏览器窗口里移动。一旦这个元素的top和left属性同时等于100px和200px,这个函数就停止执行。
四、抽象

bubuko.com,布布扣
<script>
addLoadEvent(positionMessage);
function positionMessage(){
    var elem = document.getElementById(message);
    elem.style.position = absolute;
    elem.style.left = 50px;
    elem.style.top = 100px;
    moveMessage(message,125,25,20);
}
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_x){
        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,10);
}

</script>
bubuko.com,布布扣

 

【DOM编程艺术】positionMessage函数和moveMessage函数,布布扣,bubuko.com

【DOM编程艺术】positionMessage函数和moveMessage函数

原文:http://www.cnblogs.com/positive/p/3680204.html

(0)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!