<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#content {
width:150px;
line-height:150px;
text-align:center;
color: #fff;
background-color:#ccc;
font-size:80px;
}
</style>
</head>
<body>
<div id="content">1</div>
</body>
<script>
let num = 1;
let content = document.getElementById('content');
function count() {
content.innerHTML = num++;
};
content.onmousemove = count;
// 短时间内多次触发同一事件,只执行最后一次,或者只执行最开始的一次,中间的不执行。
function debounce(func, wait) {
let timer;
return function() {
let context = this; // 注意 this 指向
let args = arguments; // arguments中存着e
if (timer) clearTimeout(timer);
timer = setTimeout(() => {
func.apply(this, args)
}, wait)
}
}
content.onmousemove = debounce(count,1000);
// // 立即执行版
// function debounce(func, wait) {
// let timer;
// return function() {
// let context = this; // 这边的 this 指向谁?
// let args = arguments; // arguments中存着e
// if (timer) clearTimeout(timer);
// let callNow = !timer;
// timer = setTimeout(() => {
// timer = null;
// }, wait)
// if (callNow) func.apply(context, args);
// }
// }
// 时间戳版
// function throttle(func, wait) {
// let previous = 0;
// return function() {
// let now = Date.now();
// let context = this;
// let args = arguments;
// if (now - previous > wait) {
// func.apply(context, args);
// previous = now;
// }
// }
// }
// content.onmousemove = throttle(count,2000);
// 定时器版
// function throttle(func, wait) {
// let timeout;
// return function() {
// let context = this;
// let args = arguments;
// console.log(timeout);
// if (!timeout) {
// timeout = setTimeout(() => {
// timeout = null;
// func.apply(context, args)
// }, wait)
// }
// }
// }
</script>
</html>