zoukankan      html  css  js  c++  java
  • JavaScript 函数节流

    其实最早看设计模式是单纯的了解js语言本身;所以看了理解了之后还是容易忘记;可能之后实际的工作需要才能记住吧;

    看下面:<!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>
    </head>
    
    <body>
        
    </body>
    
    </html>
    <script>
        window.onresize=function(){
            con();
        };
    
        function con(){
            console.log("aaaaa")
        }
    </script>

    上述情况,浏览器大概每秒会检查到10次左右的窗口变化;显然对性能不利;

    下面看一个节流函数做的处理:

    <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>
    </head>
    
    <body>
        
    </body>
    
    </html>
    <script>

    window.onresize=function(){ throttle(con,300); }; function con(){ console.log("aaaaa") }
    //节流器函数; function throttle() {     var first_param = arguments[0], methods,time_param;     if (typeof first_param === 'boolean') {         methods = arguments[1];     methods.throttleTimeId && clearTimeout(methods.throttleTimeId);     } else {          methods = first_param;          arguments.callee(true, methods); //arguments.callee指向函数的引用; //无闭包,立即销毁内存;     time_param = arguments[1]||500//默认500毫秒; //函数的argument指向的是 实参;     // window.throttle(true, methods); //arguments.callee指向函数的引用;     //为函数绑定计时器,延迟执行     methods.throttleTimeId = setTimeout(function () {       methods();     },time_param)   } } </script>

    通过把要执行的函数传入到节流函数中,达到效果;

    当用户重复快速拖动窗口的时候,在设定的时间内 time_param;防抖函数检测有true时,马上就清楚了函数的执行,除非用户在规定时间不再操作;

    这个用在ajax重复提交按钮上面也是一样的;

    简单假设:

    <input  value="查询" id="btns">

    $("#btns").on("click",function(){

     throttle(query,300);

    })

    function query(){

      $.ajax({

        url:"api/user",

        method:"post",

             data:{

          "name":"liuliu"

        },

             success:function(res){

          console.log(res)

        }

      })

    }

  • 相关阅读:
    JQuery中serialize()、serializeArray()和param()方法示例介绍
    新的跨域策略:使用COOP、COEP为浏览器创建更安全的环境
    react的状态提升
    HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3各版本之间的区别?
    面试常见的http问题
    什么是模块化?
    什么是Node js
    Asynchronous
    初识ajax
    浅拷贝与深拷贝
  • 原文地址:https://www.cnblogs.com/liuliu-hai/p/9025199.html
Copyright © 2011-2022 走看看