Maison > interface Web > js tutoriel > le corps du texte

Utilisation de la limitation de la fonction JS

php中世界最好的语言
Libérer: 2018-03-13 17:25:27
original
1565 Les gens l'ont consulté

Cette fois, je vais vous présenter l'utilisation de la limitation des fonctions JS. Quelles sont les précautions lors de l'utilisation de la limitation des fonctions JS. Voici des cas pratiques, jetons un coup d'œil.

Limitation de fonction (throttle)

La limitation de fonction consiste à planifier l'exécution d'une fonction uniquement lorsqu'elle est supérieure ou égale au cycle d'exécution, et les appels dans le cycle ne seront pas exécutés. C'est comme si une goutte d'eau tombait après avoir accumulé un certain poids.

Scénario :

Redimensionnement de la fenêtre (redimensionnement)

Défilement de la page (défilement)

Clics précipités et fous (mousedown)

Implémentation :

function throttle(method, delay){    var last = 0;    return function (){        var now = +new Date();        if(now - last > delay){
            method.apply(this,arguments);
            last = now;
        }
    }
}document.getElementById('throttle').onclick = throttle(function(){console.log('click')},2000);
Copier après la connexion

implémentation du soulignement :

_.throttle = function(func, wait, options) {    var context, args, result;    var timeout = null;    var previous = 0;    if (!options) options = {};    var later = function() {
        previous = options.leading === false ? 0 : _.now();
        timeout = null;
        result = func.apply(context, args);        if (!timeout) context = args = null;
    };    return function() {        var now = _.now();        if (!previous && options.leading === false) previous = now;        //计算剩余时间
        var remaining = wait - (now - previous);
        context = this;
        args = arguments;        //剩余时间小于等于0或者剩余时间大于等待时间(本地时间变动出现)
        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;
    };
};
Copier après la connexion

Fonction anti-rebond (anti-rebond)

La fonction anti-rebond signifie que lorsque la fonction doit se déclencher fréquemment, il n'y a que suffisamment de libre time , exécuté une seule fois. Il semble que le chauffeur du bus attende que tout le monde monte dans le bus avant de sortir du bus.

Scénario :

Temps réel Recherche (touche)

Glisser (déplacement de la souris)

Mise en œuvre :

function debounce(method, delay){    var timer = null;    return function(){        var context = this,args = arguments;
        clearTimeout(timer);
        timer = setTimeout(function(){
            method.apply(context, args);
        },delay);
    }
}document.getElementById(&#39;debounce&#39;).onclick = debounce(function(){console.log(&#39;click&#39;)},2000);
Copier après la connexion

Implémentation du soulignement :

_.debounce = function(func, wait, immediate) {    var timeout, args, context, timestamp, result;    var later = function() {        var last = _.now() - timestamp;        if (last < wait && last >= 0) {
            timeout = setTimeout(later, wait - last);
        } else {
            timeout = null;            if (!immediate) {
                result = func.apply(context, args);                if (!timeout) context = args = null;
            }
        }
    };    return function() {
        context = this;
        args = arguments;
        timestamp = _.now();        var callNow = immediate && !timeout;        if (!timeout) timeout = setTimeout(later, wait);        if (callNow) {
            result = func.apply(context, args);
            context = args = null;
        }        return result;
    };
};
Copier après la connexion

La limitation des fonctions (accélérateur) et l'anti-rebond des fonctions (anti-rebond) sont des méthodes permettant d'améliorer les performances grâce à des opérations logiques retardées, qui sont courantes et importantes dans les solutions d'optimisation frontale. Vous pouvez comprendre la différence entre les deux à partir de concepts et d'applications pratiques, et choisir la méthode appropriée si nécessaire.

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention au site Web chinois php Autres articles liés !

Lecture recommandée :

Utiliser le code JS pour créer des effets de barrage

Utiliser le canevas H5 pour créer des effets de barrage

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal