zoukankan      html  css  js  c++  java
  • 节流和防抖

    作用:减少调用频率,减轻浏览器负担,提高用户体验

    场景:

      函数防抖(debounce):当持续触发事件时,在一定时间(wait)内没有再次触发,则执行处理函数。若在期间有触发了事件,那么重当前时间开始重新计时。(搜索框)

      节流(throttle):一定时间段内只能触发一次处理函数

    函数防抖实现:

    function debounce(fn, wait) {
        var timeout = null;
        return function() {
            clearTimeout(timeout);
            timeout = setTimeout(fn, wait);
        }
    }
    // 处理函数
    function handle() {
        console.log(Math.random()); 
    }
    // 滚动事件
    window.addEventListener('scroll', debounce(handle, 1000));

    函数节流实现:

     
    定时器实现--第一次先等待再 执行
    var throttle = function(func, delay) {
                var timer = null;
                return function() {
                    var context = this;
                    var args = arguments;
                    if (!timer) {
                        timer = setTimeout(function() {
                            func.apply(context, args);
                            timer = null;
                        }, delay);
                    }
                }
            }
            function handle() {
                console.log(Math.random());
            }
            window.addEventListener('scroll', throttle(handle, 1000));
         2.时间戳实现---第一次先执行    
            function throttle(func,wait){
                var lastTime = 0;
                return function(){
                    var nowTime = +new Date();
                    if(nowTime -lastTime >wait){
                        func.apply(this,arguments);
                        lastTime = nowTime;
                    }
                }
            } 
  • 相关阅读:
    软件架构实现
    UVa644
    如何理解Hibernate中的HibernateSessionFactory类
    在pcDuino上使用蓝牙耳机玩转音乐
    Java Web----Java Web的数据库操作(三)
    Pylons Controller里面Session.commit()总是出现rollback
    ORACLE的SQL JOIN方式小结
    关于数据库学习进阶的一点体悟
    IO is frozen on database xxx, No user action is required
    ORACLE等待事件:enq: TX
  • 原文地址:https://www.cnblogs.com/freefy/p/12153978.html
Copyright © 2011-2022 走看看