Limitation simple en JavaScript
JavaScript fournit divers outils pour les fonctions de limitation, notamment lodash et le trait de soulignement. Cependant, dans les cas où ces bibliothèques peuvent être excessives, une implémentation de limitation personnalisée est souhaitable.
Fonction de limitation existante et défis
La fonction de limitation fournie est fonctionnelle, mais elle présente un problème. Une fois la période d'accélération expirée, il exécute la fonction une dernière fois. Cela peut entraîner un comportement indésirable dans des scénarios dans lesquels la fonction ne doit pas se déclencher plusieurs fois.
Fonction d'accélérateur améliorée
Pour résoudre ce problème, considérez la fonction d'accélérateur améliorée suivante qui élimine l'exécution finale après la période d'accélération :
function throttle(func, wait, options) { var context, args, result; var timeout = null; var previous = 0; if (!options) options = {}; var later = function() { previous = options.leading === false ? 0 : Date.now(); timeout = null; result = func.apply(context, args); if (!timeout) context = args = null; }; return function() { var now = Date.now(); if (!previous && options.leading === false) previous = now; var remaining = wait - (now - previous); context = this; args = arguments; if (remaining <= 0 || remaining > wait) { if (timeout) { clearTimeout(timeout); timeout = null; } previous = now; result = func.apply(context, args); if (!timeout) context = args = null; } else if (!timeout && options.trailing !== false) { timeout = setTimeout(later, remaining); } return result; }; };
Cette fonction mise à jour fournit un mécanisme d'accélération configurable avec des paramètres facultatifs pour le déclenchement des fronts montant et descendant.
Fonction d'accélération simplifiée
Si la personnalisation n'est pas requise, une fonction de limitation plus simple est la suivante :
function throttle (callback, limit) { var waiting = false; return function () { if (!waiting) { callback.apply(this, arguments); waiting = true; setTimeout(function () { waiting = false; }, limit); } } }
Cette fonction non configurable limite la fonction cible à un intervalle de temps spécifié sans avoir besoin d'options complexes. .
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!