So verwenden Sie die Drosselungsfunktion in js (mit Beispielcode)
本篇文章给大家带来的内容是关于js中节流函数的使用方法(附实例代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
一、前言
不知道大家是否遇到过这样一个问题,对于一些函数或者事件它们能够频繁地触发,比如说下面的滚动事件,
window.onscroll = function(){ console.log("触发了事件"); }
当然,需要把body的高度设置高一点(比如说10000px),不然无论你怎么滚动,都看不到效果的~
只要我们滚动鼠标的滚轮或者是拖拽页面的滚动条,上面的事件就能触发,而且非常地频繁(这一点,大家可以自己去尝试一下,通过观察控制台就能体会到了)。
又比如说窗口的onresize事件,
window.onresize = function(){ console.log("触发了事件"); }
只要我们改变窗口的大小,它也能够频繁地触发。说到onresize我就想起了我之前做的一个小球随机运动demo,个人觉得还算可以,所以想分享给大家。
demo演示地址
github源码地址
然而在一些场景下,我们是不希望这种事情发生的,对于这种频繁发生的事件,可以通过节流控制它的频率。
二、节流函数(Throttle)
在说节流之前,我想先提一下水龙头,我相信大家肯定对它不陌生,无论是刷牙洗脸洗碗洗澡什么的都用得着它,在生活中那是无处不在!当我们把水龙头放得很开的时候,那水哗啦啦的流,把它拧紧到一定程度后,水是呈滴状地滴落,而且间隔时间相同。聪明的小伙伴们或许已经发现其中的奥秘了,没错,如果把频繁触发的事件比作水流的话,那么节流函数就是水龙头,能够控制事件触发的频率,也就是说,让原本频繁触发的事件变成间隔相同的时间后才能被触发。
基于上面的思路,我们可以封装一个函数,也就是节流函数,用来控制事件的发生频率,
function throttle(fn,time){ var startTime = new Date();//初始时间 return function(){ var time_ = (new Date() - startTime) >= time;//判断时间间隔是否大于传入的time值,返回布尔值 if(time_){ fn.apply(this); startTime = new Date();//函数执行完后更新初始时间的值 } } }
有了节流函数之后,我们再对上面的事件进行修改如下:
function throttle(fn,time){ var startTime = new Date(); return function(){ var time_ = (new Date() - startTime) >= time; if(time_){ fn.apply(this); startTime = new Date(); } } } function fn(){ console.log("触发了事件"); } window.onscroll = throttle(fn,1000);
同样,别忘了设置body的高度~,fn于是每隔一秒触发一次,并不会频繁地触发了,大家可以自己去试试。
三、节流在无缝轮播中的应用
在无缝轮播中,如果用户疯狂地点击下一张图片按钮的话,那么会出现一个问题,就是上一个动画还没执行完,下一个动画就开始执行了,结果就是会导致整个轮播过程显得非常混乱,用户体验也会下降,就像下面的动图演示一样,
为了解决上述问题,可以用节流控制每次点击事件发生的频率,达到只有在上一张图片的动画执行完了,下一次点击事件才能触发的效果,以下是比较简单的无缝轮播演示demo和代码部分,
无缝轮播演示
代码部分:
/* css代码 */ body{ background-color: #333; } .wrap{ overflow: hidden; position: relative; width: 700px; height: 450px; margin: 100px auto 0; } .wrap .btn{ position: absolute; top: 50%; z-index: 1; width: 50px; height: 80px; margin-top: -40px; background-color: rgba(0,0,0,.5); color: #fff; text-align: center; line-height: 80px; cursor: pointer; } .wrap .left{ left: 0; } .wrap .right{ right: 0; } ul{ transition-timing-function: linear; position: absolute; left: 0; top: 0; list-style: none; margin: 0; padding: 0; width: 3500px; height: 100%; } li{ float: left; width: 700px; height: 100%; } li:nth-of-type(1){ background: url("images/01.jpg") no-repeat center/cover; } li:nth-of-type(2){ background: url("images/02.png") no-repeat center/cover; } li:nth-of-type(3){ background: url("images/03.png") no-repeat center/cover; } li:nth-of-type(4){ background: url("images/04.png") no-repeat center/cover; } li:nth-of-type(5){ background: url("images/01.jpg") no-repeat center/cover; }
<!-- html代码 --><p class="wrap"><p class="btn left"><</p><p class="btn right">></p><ul> <li></li> <li></li> <li></li> <li></li> <li></li></ul></p>
//js代码 (function(){ var oUl = document.getElementsByTagName("ul")[0], aButton = document.getElementsByClassName("btn"), aLi = document.getElementsByTagName("li"), oWidth = parseFloat(getComputedStyle(aLi[0]).width), oWrap = document.getElementsByClassName("wrap")[0], len = aLi.length, index = 0; function btnPre(){ index--; if(index < 0){ oUl.style.transition = 0 + "s"; oUl.style.left = -oWidth*(len-1) + "px"; index = len - 2; setTimeout(function(){ oUl.style.transition = 1 + "s"; oUl.style.left = -oWidth*(index) + "px"; },1000/60); } else{ oUl.style.transition = 1 + "s"; oUl.style.left = -oWidth*(index) + "px"; } } function btnNext(){ index++; if(index === len-1){ oUl.style.left = -oWidth*index + "px"; index = 0; setTimeout(function(){ oUl.style.transition = 0 + "s"; oUl.style.left = 0 + "px"; },1000); } else{ oUl.style.transition = 1 + "s"; oUl.style.left = -oWidth*index + "px"; } } function throttle(fn,time){ var startTime = new Date(); return function(){ var time_ = (new Date() - startTime) >= time; if(time_){ fn.apply(this); startTime = new Date(); } } } aButton[0].onclick = throttle(btnPre,1000); aButton[1].onclick = throttle(btnNext,1000); var timer = setInterval(btnNext,5000); oWrap.onmouseover = function(){ clearInterval(timer); } oWrap.onmouseout = function(){ timer = setInterval(btnNext,5000); } })();
相关推荐:
Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Drosselungsfunktion in js (mit Beispielcode). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

PythonLambda-Ausdrücke sind ein leistungsstarkes und flexibles Tool zum Erstellen prägnanter, lesbarer und benutzerfreundlicher Codes. Sie eignen sich hervorragend zum schnellen Erstellen anonymer Funktionen, die als Argumente an andere Funktionen übergeben oder in Variablen gespeichert werden können. Die grundlegende Syntax eines Lambda-Ausdrucks lautet wie folgt: lambdaarguments:expression Der folgende Lambda-Ausdruck fügt beispielsweise zwei Zahlen hinzu: lambdax,y:x+y Dieser Lambda-Ausdruck kann wie folgt als Argument an eine andere Funktion übergeben werden: defsum( x ,y):returnx+yresult=sum(lambdax,y:x+y,1,2)In diesem Beispiel

Einführung in die Methode zum Abrufen des HTTP-Statuscodes in JavaScript: Bei der Front-End-Entwicklung müssen wir uns häufig mit der Interaktion mit der Back-End-Schnittstelle befassen, und der HTTP-Statuscode ist ein sehr wichtiger Teil davon. Das Verstehen und Abrufen von HTTP-Statuscodes hilft uns, die von der Schnittstelle zurückgegebenen Daten besser zu verarbeiten. In diesem Artikel wird erläutert, wie Sie mithilfe von JavaScript HTTP-Statuscodes erhalten, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist ein HTTP-Statuscode? HTTP-Statuscode bedeutet, dass der Dienst den Dienst anfordert, wenn er eine Anfrage an den Server initiiert

Zu den Vorteilen der funktionalen Java-Programmierung gehören Einfachheit, Zusammensetzbarkeit, Parallelität, Testfreundlichkeit und Leistung. Zu den Nachteilen gehören Lernkurve, Schwierigkeiten beim Debuggen, begrenzte Flexibilität und Leistungsaufwand. Zu seinen Hauptmerkmalen gehören reine Funktionen ohne Nebenwirkungen, Datenverarbeitungspipelines, zustandsloser Code und effiziente Streaming-APIs.

C++-Lambda-Ausdrücke bringen Vorteile für die funktionale Programmierung, darunter: Einfachheit: Anonyme Inline-Funktionen verbessern die Lesbarkeit des Codes. Wiederverwendung von Code: Lambda-Ausdrücke können übergeben oder gespeichert werden, um die Wiederverwendung von Code zu erleichtern. Kapselung: Bietet eine Möglichkeit, einen Codeabschnitt zu kapseln, ohne eine separate Funktion zu erstellen. Praktischer Fall: Filterung ungerader Zahlen in der Liste. Berechnen Sie die Summe der Elemente in einer Liste. Lambda-Ausdrücke erreichen die Einfachheit, Wiederverwendbarkeit und Kapselung funktionaler Programmierung.

Bei der Verwendung funktionaler Programmierung in Go sind fünf häufige Fehler und Fallstricke zu beachten: Vermeiden Sie versehentliche Änderungen von Referenzen und stellen Sie sicher, dass neu erstellte Variablen zurückgegeben werden. Um Parallelitätsprobleme zu lösen, verwenden Sie Synchronisierungsmechanismen oder vermeiden Sie die Erfassung externer veränderlicher Zustände. Gehen Sie mit Teilfunktionalisierung sparsam um, um die Lesbarkeit und Wartbarkeit des Codes zu verbessern. Behandeln Sie Fehler in Funktionen immer, um die Robustheit Ihrer Anwendung sicherzustellen. Berücksichtigen Sie die Auswirkungen auf die Leistung und optimieren Sie Ihren Code mithilfe von Inline-Funktionen, abgeflachten Datenstrukturen und Stapelverarbeitung von Vorgängen.

Der Lambda-Ausdruck in Python ist eine weitere Syntaxform einer anonymen Funktion. Es handelt sich um eine kleine anonyme Funktion, die an einer beliebigen Stelle im Programm definiert werden kann. Ein Lambda-Ausdruck besteht aus einer Parameterliste und einem Ausdruck, der jeder gültige Python-Ausdruck sein kann. Die Syntax eines Lambda-Ausdrucks lautet wie folgt: lambdaargument_list:expression. Der folgende Lambda-Ausdruck gibt beispielsweise die Summe zweier Zahlen zurück: lambdax,y:x+y. Dieser Lambda-Ausdruck kann an andere Funktionen wie die Karte übergeben werden () Funktion: Zahlen=[ 1,2,3,4,5]Ergebnis=Karte(Lambda

Funktionale Programmierung ist nicht für alle Go-Projekte geeignet. Es bietet Vorhersagbarkeit, Parallelität und Modularität, kann jedoch zu Leistungseinbußen führen, die Code-Redundanz erhöhen und eine Lernkurve erfordern. In Projekten, in denen diese Vorteile benötigt werden, ist FP von Vorteil, aber in Projekten, in denen Leistung und Einfachheit des Codes im Vordergrund stehen, ist objektbasierte Programmierung besser geeignet.
