高频事件
- window对象的resize、scroll和拖拽时的mousemove事件
- 射击游戏中的mousedow、keydown事件
- 类似百度搜索提示的keyup事件
防抖
在事件多次触发时,通过防抖,只执行最后一次处理程序; ```javascript var delay = 300; var common = document.getElementById(‘common’) // 获取页面的左边 var special = document.getElementById(‘special’) // 获取页面的右边
var timeid;
function debounce(fn, delay) { // 定义一个debounce函数 clearTimeout(timeid) timeid = setTimeout(function () { fn() }, delay) }
function addlist() { // 监听事件的响应事件,执行dom操作。 special.innerHTML += ‘
function commonWay() { // 这是执行了普通的函数 common.innerHTML += ‘
<a name="xLw6N"></a>## 节流降低事件处理程序执行的频率。比如:onmousemove事件如果每秒执行200次,通过节流使他只执行20次。```javascriptvar delay = 300;var common = document.getElementById('common') // 获取页面的左边var special = document.getElementById('special') // 获取页面的右边function addlist() { // 监听事件的响应事件,执行dom操作。special.innerHTML += '<li>k</li>'}function commonWay() { // 这是执行了普通的函数common.innerHTML += '<li>k</li>'}// tottle的实现,也就是节流的实现,就是设置了一个一开始函数运行的时间戳进行执行var startTime, timestamp, timer;function throttle(fn, delay) {timestamp = +new Date()clearTimeout(timer)if (!startTime) {startTime = timestamp}if (timestamp - startTime >= delay) {fn()startTime = timestamp} else {timer = setTimeout(function () {fn()}, delay)}}function debounce(fn, delay) { // 定义一个debounce函数clearTimeout(fn.timeid)fn.timeid = setTimeout(function () {fn()}, delay)}window.addEventListener('resize', function () {throttle(commonWay, 100);debounce(addlist, delay);})
