解决反复调用程序时变量的问题


 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>移动对象</title>
 6 <script language="javascript">
 7 function moveElement(elementID , finalX , finalY , interval){
 8     if(!document.getElementById) return false;
 9     if(!document.getElementById(elementID)) return false;
10     
11     var elem = document.getElementById(elementID);
12     
13     if(elem.movement)  //这里是重点,当元素的属性已经存在时就先清除计时器,否则无动作
14         clearTimeout(elem.movement);
15     
16     var xpos = parseInt(elem.style.left);
17     var ypos = parseInt(elem.style.top);
18     //alert(xpos);
19     if(xpos==finalX && ypos==finalY)
20         return true;
21     if(xpos < finalX) xpos++;
22     if(xpos > finalX) xpos--;
23     if(ypos < finalY) ypos++;
24     if(ypos > finalY) ypos--;
25     
26     elem.style.left = xpos + "px";
27     elem.style.top = ypos + "px";
28     
29     var repeat = "moveElement('" + elementID + "'," + finalX + "," + finalY + "," + interval + ")";
30     elem.movement = setTimeout(repeat , interval);
31 }
32 
33 function positionMessage(msg , startPx , endPx , startPy , endPy , interval){
34     if(!document.getElementById) return false;
35     if(!document.getElementById(msg)) return false;
36     var elem = document.getElementById(msg);
37     
38     elem.style.position = "absolute";
39     elem.style.left = startPx + "px";
40     elem.style.top = startPy + "px";
41 //alert(elem.style.left);
42     moveElement(msg , endPx , endPy , interval);
43 }
44 
45 function prepareSlideshow(){
46     var preview = document.getElementById("preview");
47     preview.style.position = "absolute";
48     preview.style.left = "0px";
49     preview.style.top = "0px";
50     
51     var list = document.getElementById("linklist");
52     var links = list.getElementsByTagName("a");
53     links[0].onmouseover = function(){
54         moveElement("preview",-100,0,10);
55     }
56     links[1].onmouseover = function(){
57         moveElement("preview",-200,0,10);
58     }
59     links[2].onmouseover = function(){
60         moveElement("preview",-300,0,10);
61     }
62     
63 }
64 </script>
65 
66 <style type="text/css">
67 #slideshow{
68     width:500px;
69     height:500px;
70     position:relative;
71     overflow:hidden;
72 }
73 </style>
74 </head>
75 
76 <body>
77 <id="message">Message</p>
78 <id="message2">Message</p>
79 <h1>Web Design</h1>
80 <p>These are the things you should know.</p>
81 <ol id="linklist">
82     <li><href="a.html">aaaa</a></li>
83     <li><href="b.html">bbbb</a></li>
84     <li><href="c.html">cccc</a></li>
85 </ol>
86 <div id="slideshow">
87     <img src="images/1a.jpg" alt="something" id="preview" />
88 </div>
89 
90 <script language="javascript">
91     positionMessage("message" , 0 , 350 , 0 , 278 , 10);
92     positionMessage("message2" , 50 , 315 , 50 , 361 , 10);
93     prepareSlideshow();
94 </script>
95 </body>
96 </html>
97 因为如果用全局变量,反复触发一个事件的时候会出现速度加快的现象,所以把那个变量设置为被移动元素的属性就解决了这个问题
98 

posted on 2009-06-19 16:59  Hokie  阅读(140)  评论(0编辑  收藏  举报

导航