


The examples in this article describe the concept and usage of JavaScript function throttling. I share it with you for your reference. The details are as follows:
Recently when I was making a web page, I had a need to change the size of some page elements when the browser window changed, so I naturally thought of window resize. Event, so that’s what I wrote
<!DOCTYPE html> <html> <head> <title>Throttle</title> </head> <body> <script type="text/javascript"> n=0; function resizehandler(){ console.log(new Date().getTime()); console.log(++n); } window.onresize=resizehandler; </script> </body> </html>
The function was implemented, but when I changed the size of the browser window by dragging, I looked at the console
Yes, it’s simple A drag and drop caused my resizeHandler() method to be executed 52 times. This is not the effect I want at all. In fact, the code of my resizeHandler() method is very complicated, and I even use ajax to send a request to the server. If it were a simple one Changing the window size requires calling it 52 times, which is okay.
Function throttling
In fact, my original intention is just to make some adjustments to the page after the window is resized, and the resize event of the window is not in It is triggered after resize is completed. I don't know the specific frequency, but it is called continuously until the window size no longer changes. In fact, a similar mechanism is mousemove, which is triggered repeatedly in a short period of time.
In "JavaScript Advanced Programming", there is a special function throttling to deal with this problem
function throttle(method,context){ clearTimeout(method.tId); method.tId=setTimeout(function(){ method.call(context); },500); }
The principle is very simple. Use a timer to delay function execution by 500 milliseconds. If within 500 milliseconds, If the function is called again, the previous call will be deleted, and this call will be executed 500 milliseconds later, and so on. In this way, I can change the code I just made to
<script type="text/javascript"> n=0; function resizehandler(){ console.log(new Date().getTime()); console.log(++n); } function throttle(method,context){ clearTimeout(method.tId); method.tId=setTimeout(function(){ method.call(context); },500); } window.onresize=function(){ throttle(resizehandler,window); }; </script>
and try dragging it. Sure enough, it is only executed once.
Another approach
There is also a function throttling solution on the Internet , this is how it is done
function throttle(method,delay){ var timer=null; return function(){ var context=this, args=arguments; clearTimeout(timer); timer=setTimeout(function(){ method.apply(context,args); },delay); } }
Try calling it, the same effect
<script type="text/javascript"> n=0; function resizehandler(){ console.log(new Date().getTime()); console.log(++n); } function throttle(method,delay){ var timer=null; return function(){ var context=this, args=arguments; clearTimeout(timer); timer=setTimeout(function(){ method.apply(context,args); },delay); } } window.onresize=throttle(resizehandler,500);//因为返回函数句柄,不用包装函数了 </script>
Comparison
Both methods are used Instead of setTimeout, the difference is that the function added by the second method delays the execution time. This function is easily available in the first solution, just by adding a parameter.
But the first solution sets tId as a variable of the function and saves it, while the second solution creates a closure to store it. Personally, I don't think the difference is big. I really like the first one, it's simple and efficient.
New requirements
One day I made something similar, just like the automatic prompt for input on the Baidu homepage. I bound the keyup event to the text, every time the keyboard bounces up. It prompts automatically, but I don’t want to prompt so frequently, so I used the above method, but it’s a tragedy. It only prompts after stopping input for 500 milliseconds. There is no prompt at all during the input process. I looked at the code and found that it is not true. As long as the user can touch type and press the keyboard within 500 milliseconds, the prompt function will be continuously delayed, so that the prompt will only occur when it stops, which is meaningless.
Can it be executed at a fixed interval based on function throttling?
Small changes
After searching on the Internet, we can make some changes based on the second way of writing (the first way of expanding multiple variables for functions feels a bit bad) and add a parameter as Fixed intervals must be executed
function throttle(method,delay,duration){ var timer=null, begin=new Date(); return function(){ var context=this, args=arguments, current=new Date();; clearTimeout(timer); if(current-begin>=duration){ method.apply(context,args); begin=current; }else{ timer=setTimeout(function(){ method.apply(context,args); },delay); } } }
In this way, each time we judge how long the interval is, if it exceeds the set time, it will be executed immediately. Try the effect with the example just now
window.onresize=throttle(resizehandler,100,200);
Sure enough, it is neither executed frequently nor executed at the end
I hope this article will be helpful to everyone in JavaScript programming.
For more detailed explanations of JavaScript function throttling concepts and usage examples, please pay attention to the PHP Chinese website!

Detailed explanation of JavaScript string replacement method and FAQ This article will explore two ways to replace string characters in JavaScript: internal JavaScript code and internal HTML for web pages. Replace string inside JavaScript code The most direct way is to use the replace() method: str = str.replace("find","replace"); This method replaces only the first match. To replace all matches, use a regular expression and add the global flag g: str = str.replace(/fi

This tutorial shows you how to integrate a custom Google Search API into your blog or website, offering a more refined search experience than standard WordPress theme search functions. It's surprisingly easy! You'll be able to restrict searches to y

So here you are, ready to learn all about this thing called AJAX. But, what exactly is it? The term AJAX refers to a loose grouping of technologies that are used to create dynamic, interactive web content. The term AJAX, originally coined by Jesse J

This article series was rewritten in mid 2017 with up-to-date information and fresh examples. In this JSON example, we will look at how we can store simple values in a file using JSON format. Using the key-value pair notation, we can store any kind

Enhance Your Code Presentation: 10 Syntax Highlighters for Developers Sharing code snippets on your website or blog is a common practice for developers. Choosing the right syntax highlighter can significantly improve readability and visual appeal. T

Leverage jQuery for Effortless Web Page Layouts: 8 Essential Plugins jQuery simplifies web page layout significantly. This article highlights eight powerful jQuery plugins that streamline the process, particularly useful for manual website creation

This article presents a curated selection of over 10 tutorials on JavaScript and jQuery Model-View-Controller (MVC) frameworks, perfect for boosting your web development skills in the new year. These tutorials cover a range of topics, from foundatio

Core points This in JavaScript usually refers to an object that "owns" the method, but it depends on how the function is called. When there is no current object, this refers to the global object. In a web browser, it is represented by window. When calling a function, this maintains the global object; but when calling an object constructor or any of its methods, this refers to an instance of the object. You can change the context of this using methods such as call(), apply(), and bind(). These methods call the function using the given this value and parameters. JavaScript is an excellent programming language. A few years ago, this sentence was


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Dreamweaver CS6
Visual web development tools

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment
