Maison > interface Web > js tutoriel > Comment implémenter la fonction anti-rebond dans js (tutoriel détaillé)

Comment implémenter la fonction anti-rebond dans js (tutoriel détaillé)

亚连
Libérer: 2018-06-11 15:53:50
original
2208 Les gens l'ont consulté

Cet article présente principalement des exemples de fonctions anti-rebond (debounce) dans angulaire.js et vue.js. Maintenant, je le partage avec vous et vous donne une référence.

Description du problème

Dans la zone de saisie de recherche, ce n'est qu'une fois que l'utilisateur a arrêté de taper que les opérations suivantes, telles que le lancement d'une requête HTTP, etc., seront effectuées.

Les étudiants qui ont étudié les circuits électroniques devraient connaître l'anti-tremblement des boutons. Le principe est le même : lorsque l'action est appelée n millisecondes, l'action sera exécutée. Si l'action est à nouveau appelée dans ces n millisecondes, le temps d'exécution sera recalculé. Cet article explique comment obtenir un anti-secousse des entrées utilisateur dans angulaire.js et vue.js respectivement.

Solution dans angulaire.js

Écrivez la fonction anti-rebond en tant que service pour faciliter plusieurs appels :

.factory('debounce', ['$timeout','$q', function($timeout, $q) {
  // The service is actually this function, which we call with the func
  // that should be debounced and how long to wait in between calls
  return function debounce(func, wait, immediate) {
   var timeout;
   // Create a deferred object that will be resolved when we need to
   // actually call the func
   var deferred = $q.defer();
   return function() {
    var context = this, args = arguments;
    var later = function() {
     timeout = null;
     if(!immediate) {
      deferred.resolve(func.apply(context, args));
      deferred = $q.defer();
     }
    };
    var callNow = immediate && !timeout;
    if ( timeout ) {
     $timeout.cancel(timeout);
    }
    timeout = $timeout(later, wait);
    if (callNow) {
     deferred.resolve(func.apply(context,args));
     deferred = $q.defer();
    }
    return deferred.promise;
   };
  };
 }])
Copier après la connexion

Appelez la méthode dans Inject anti-rebond dans le contrôleur/directive qui doit utiliser cette fonction, et injectez également $watch, puis :

$scope.$watch('searchText',debounce(function (newV, oldV) {
  console.log(newV, oldV);
  if (newV !== oldV) {
    $scope.getDatas(newV);
  }
}, 350));
Copier après la connexion

Vous avez terminé !

Solution dans Vue.js

Enregistrez d'abord le rebond dans le fichier de fonction publique

export function debounce(func, delay) {
 let timer

 return function (...args) {
  if (timer) {
   clearTimeout(timer)
  }
  timer = setTimeout(() => {
   func.apply(this, args)
  }, delay)
 }
}
Copier après la connexion

puis introduisez-le dans les composants qui doivent être utilisé anti-rebond, et appelez-le dans le cycle de vie créé :

created() {
 this.$watch('searchText', debounce((newSearchText) => {
  this.getDatas(newSearchText)
 }, 200))
}
Copier après la connexion

Vous avez terminé !

J'ai compilé ce qui précède pour vous, j'espère que cela vous sera utile à l'avenir.

Articles connexes :

Serveur de requêtes de builds express

Utilisez la fonction de découpage personnalisée js pour supprimer les espaces aux deux extrémités

Principe de fonctionnement de JavaScript

Sélection complète et sélection inverse dans vue

Explication détaillée de l'utilisation de jest pour tester React Native composants

Sélectionnez tout dans la vue pour lier et obtenir des données

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