事件节流

319 阅读1分钟

在写前端页面的表单验证时,经常会遇到输入框输入内容的时候进行表单的验证,或者浏览器窗口缩放的时候触发一个事件,亦或是浏览器发生滚动的时候触发函数。

由于输入、浏览器窗口缩放、页面滚动都是在很快的时间内发生的事情,如果每次输入或者缩放窗口都要去执行ajax请求的话,会影响页面的性能,此时,我们就需要用到事件节流。

下面写两种比较常用的事件节流方法

方法一:setTimeout(消除抖动)

var timer;
$("#phone").on("keyup",function(){
    clearTimeout(timer);
    timer = setTimeout(function(){
        alert("输入内容进行判断");
    },500)
});

我们希望用户只有在最后一次输入的时候才会进行判断,以上代码每次输入的时候,都会重置计时器,只有当用户输入后时间超过0.5秒(用户结束输入)才会进行判断,弹出“输入内容进行判断”弹窗,平时项目中这里就可以写ajax请求了。


方法二:计时器节流

$(document).ready(function() {
    var scrolled = false;

    $(window).scroll(function() {
        scrolled = true;
    });

    setInterval(function() {
        if (scrolled) {
            checkScrollPosition();
            scrolled = false;
        }
    }, 250);

    checkScrollPosition();
});

文档加载完成后给定一个scrolled为false,当页面滚动的时候scrolled为true,计时器每隔250毫秒执行一次,判断scrolled的值是否为true,若为true则执行checkScrollPosition(),并且将scrolled赋值为false。