首页 > 网站 > WEB开发 > 正文

JavaScript定时器

2024-04-27 15:05:43
字体:
来源:转载
供稿:网友

setTimeout:

setTimeout能够让某个函数在经过一段预定时间之后才开始执行,这个函数有两个参数,第一个参数通常是一个字符串,例如“将要执行的函数名()”;第二个参数是数值,表示经过多少时间才开始执行函数,单位是毫秒。

setTimeout(“function”,interval)

如果想取消定时器,就必须事先把setTimeout函数的返回值赋值给一个变量,用clearTimeout函数来取消定时器,这个函数需要一个参数,就是保存着setTimeout函数返回值的变量。

variable=setTimeout(“function”,interval)

clearTimeout(variable)

例如随便举例一个函数:

movement=setTimeout("moveMessage()",5000);

clearTimeout(movement);

movement变量对应着setTimeout调用,它是全局变量,声明它时未使用var,这意味着可以在任何地方取消定时器。

如下为一个简单的动画实例,实现鼠标经过显示每个链接的预览图(一张大图滑动):

<!DOCTYPE html><html>	<head>		<meta charset="UTF-8">		<title></title>		<style type="text/CSS">			#slideshow {				width: 100px;				height: 100px;				position: relative;				overflow: hidden;			}						#PReview {				position: absolute;				width: 400px;				height: 100px;			}		</style>	</head>	<body>		<h1>Web Design</h1>		<p>These are the things you should know</p>		<ol id="linklist">			<li>				<a href="structure.html">Structure</a>			</li>			<li>				<a href="presentation.html">Presentation</a>			</li>			<li>				<a href="behavior.html">Behavior</a>			</li>		</ol>		<!--<script type="text/javascript" src="js/moveElement.js"></script>-->		<!--<script type="text/Javascript" src="js/prepareSlidershow.js"></script>-->		<!--<script type="text/javascript" src="js/insertAfter.js"></script>-->		<script type="text/javascript">			window.onload = function() {				prepareSlideshow();			}			function prepareSlideshow() {				var slideshow = document.createElement("div");				slideshow.setAttribute("id", "slideshow");				var preview = document.createElement("img");				preview.setAttribute("src", "img/b90e7bec54e736d12c42ceb69c504fc2d562693e.jpg");				preview.setAttribute("alt", "building blocks of web design");				preview.setAttribute("id", "preview");				slideshow.appendChild(preview);				//取得列表中的所有链接				var list = document.getElementById("linklist");				//把预览图放在链接后面				insertAfter(slideshow, list);				var links = list.getElementsByTagName("a");				//为mouSEOver事件添加动画效果				links[0].onmouseover = function() {					moveElement("preview", -100, 0, 10);				}				links[1].onmouseover = function() {					moveElement("preview", -200, 0, 10);				}				links[2].onmouseover = function() {					moveElement("preview", -300, 0, 10);				}			}			//封装动画函数			function moveElement(elementID, final_x, final_y, interval) {				//elementID表示打算移动的元素的ID,final_x表示目的地的左位置,final_y表示目的地的右位置,interval表示停顿时间				if(!document.getElementById || !document.getElementById(elementID)) return false;				var elem = document.getElementById(elementID);				if(elem.movement) { //清除定时器					clearTimeout(elem.movement);				}				if(!elem.style.left) {					elem.style.left = "0px";				}				if(!elem.style.top) {					elem.style.top = "0px";				}				//elem.style.left和elem.style.top这两个值都是字符串,而进行算术比较操作需要的是数,不是字符串,需用parseInt()把字符串里的				//数值提取出来,如果把一个以数字开头的字符串传递给parseInt,它将返回一个数值。				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 += Math.ceil((final_x - xpos) / 10);				}				if(xpos > final_x) {					xpos -= Math.ceil((xpos - final_x) / 10);				}				if(ypos < final_y) {					ypos += Math.ceil((final_y - ypos) / 10);				}				if(ypos > final_y) {					ypos -= Math.ceil((ypos - final_y) / 10);				}				elem.style.left = xpos + "px";				elem.style.top = ypos + "px";				elem.movement = setTimeout("moveElement('" + elementID + "'," + final_x + "," + final_y + "," + interval + ")", interval);			}			//elementID表示字符串,final_x表示数字,字符串要多加一个单引号			function insertAfter(newElement, targetElement) {				var parent = targetElement.parentNode;				if(parent.lastChild == targetElement) {					parent.appendChild(newElement);				} else {					parent.insertBefore(newElement, targetElement.nextSibling);				}			}		</script>	</body></html>


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表