BOM:Browser Object Model
计时器
计时器是异步的,当时机成熟之后才会执行
计时器会返回一个数字,该数字表示计时器的编号
setTimeout方法:指定时间到达后运行某个函数
- clearTimeout方法:清除计时器
setInterval方法:指定间隔时间到达后运行某个函数
- clearInterval方法:清除计时器
js
//
timer1 = setTimeout(function() {
console.log("延迟计时器1");
}, 3000);
clearTimeout(timer1);
//
timer2 = setInterval(function() {
console.log("间歇计时器2");
});
clearInterval(timer2);练习
- 文字时钟
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
body {
text-align: center;
}
</style>
</head>
<body>
<h1></h1>
<script>
var h1 = document.querySelector("h1");
function setTime() {
var date = new Date();
var hour = date.getHours();
var minute = date.getMinutes();
var second = date.getSeconds();
h1.innerHTML = `${hour.toString().padStart(2,"0")}:${minute.toString().padStart(2,"0")}:${second.toString().padStart(2,"0")}`;
}
setTime();
setInterval(setTime, 1000);
</script>
</body>
</html>- APM计时器
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
body {
text-align: center;
}
p {
font-size: 2em;
}
</style>
</head>
<body>
<p>
倒计时:<span id="spanclock">5</span>
</p>
<p>
点击数:<span id="spannum">0</span>
</p>
<p>
<button id="btnadd">点击</button>
<button id="btnreset">重置</button>
</p>
<script>
var num = 0,
clock = 5, //倒计时
timer, //计时器id
isOver = false, //是否结束
spanNum = document.getElementById("spannum"),
btnAdd = document.getElementById("btnadd"),
btnReset = document.getElementById("btnreset"),
spanClock = document.getElementById("spanclock");
btnAdd.onclick = function () {
if (num === 0) {
setClock();
}
if (!isOver) {
setNum(num + 1);
}
}
btnReset.onclick = function () {
setNum(0);
clock = 5;
spanClock.innerText = clock;
isOver = false;
}
function setNum(n) {
num = n;
spanNum.innerText = num;
}
//开启一个倒计时
function setClock() {
if (timer) {
return;
}
timer = setInterval(function () {
clock--;
spanClock.innerText = clock;
if (clock === 0) {
clearInterval(timer);
timer = null;
isOver = true; //结束了
}
}, 1000);
}
</script>
</body>
</html>- 触碰反弹小球
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.move {
position: fixed;
left: 0;
top: 0;
width: 100px;
height: 100px;
border-radius: 50%;
background: red;
}
</style>
</head>
<body>
<div class="move">
<!-- 该div自动向右下移动,遇到边界反弹 -->
</div>
<script>
var div = document.querySelector(".move"),
x = 0, //初始坐标x
y = 0, //初始坐标y
xDis = 2, //每次移动x的距离
yDis = 2, //每次移动y的距离
duration = 16, //移动的间隔时间
width = 100,
height = 100;
setInterval(function() {
x += xDis;
y += yDis;
//边界判定
if (y >= document.documentElement.clientHeight - height) {
y = document.documentElement.clientHeight - height;
yDis = -yDis;
}
if (y <= 0) {
y = 0;
yDis = -yDis;
}
if (x <= 0) {
x = 0;
xDis = -xDis;
}
if (x >= document.documentElement.clientWidth - width) {
x = document.documentElement.clientWidth - width;
xDis = -xDis;
}
div.style.left = x + "px";
div.style.top = y + "px";
}, duration);
</script>
</body>
</html>