0
votes

Comment puis-je supprimer complètement une fonction jQuery après (fenêtre) .Resize

J'ai créé une fonction.
Après avoir redimensionné la fenêtre, je souhaite supprimer complètement la fonction.
La méthode off () supprime uniquement le code à l'intérieur de l'événement de défilement.
Lorsque je redimensionne la fenêtre, je garde l'impression "ceci est toujours exécuté après le redimensionnement".
Puis-je supprimer complètement "myFunction" après avoir redimensionné la fenêtre avec ou sans détruire ma fonction?

function myFunction(ele) {
    myArray = [];
    this.num1 = $.each(ele, function(){
        var posx = ele.offset().top;
        myArray.push(pos);
        console.log('this is still execute after resize');
        $(window).on('scroll', function(){
            // abcxyz
        });
    });
}

var target = $('p');
var run = new myFunction(target);

$(window).on('resize',function(){
    console.log("resized");
    $(window).off('scroll', myFunction(target));
});


2 commentaires

Utilisez simplement une variable / indicateur global et modifiez-la sous Windows Redimensionner. Comme il est global, vous pouvez l'utiliser à l'intérieur de votre fonction.


Notez que votre fonction ne renvoie rien, donc run = new myFunction (...) et off ('scroll', myFunction (target)) n'ont aucun sens. Off () attend également la référence de la fonction, c'est-à-dire ne pas laisser la parenthèse off ('scroll', myFunction) ou juste le nom de l'événement off ('scroll') . Notez simplement que off ('scroll', myFunction) ne fonctionnera toujours pas car vous n'utilisez jamais myFunction comme gestionnaire d'événements


3 Réponses :


0
votes

Il s'agit d'une solution de contournement pour la vérification des délais à l'aide du minuteur, car il n'y a pas d'événement de redimensionnement exact que vous recherchez. Si vous vous arrêtez pendant 500 ms, redimensionnez les appels de fonction. Cela peut vous aider

function myFunction(ele) {
myArray = [];
this.num1 = $.each(ele, function(){
    var posx = ele.offset().top;
    myArray.push(pos);
    console.log('this is still execute after resize');
    $(window).on('scroll', function(){
        // abcxyz
    });
});
}

var target = $('p');
var run = new myFunction(target);

var listenForStop = (function () {
    var timers = {};
    return function (callback, ms, uId) {
        if (timers[uId]) {
            clearTimeout(timers[uId]);
        }
        timers[uId] = setTimeout(callback, ms);
    };
})();

$(window).on('resize', function () {
    listenForStop(function () {
        $(window).off('scroll', myFunction(target));
    }, 500, "unique");
});


2 commentaires

Merci je vais l'essayer.


Mon plaisir @BaoPharm. Si cela fonctionne pour vous, votez pour moi. Merci



0
votes

Vous pouvez simplement le remplacer par "indéfini" après le redimensionnement.

    function myFunctionBackup(ele) {
    myArray = [];
    this.num1 = $.each(ele, function(){
        var posx = ele.offset().top;
        myArray.push(pos);
        console.log('this is still execute after resize');
        $(window).on('scroll', function(){
            // abcxyz
        });
    });
}

var target = $('p');
var myFunction = myFunctionBackup;
myFunction(target);

  $(window).on('resize',function(){
        console.log("resized");
     if (typeof(myFunction) == "function"){
myFunction = undefined;
} 
    });

// When you want to return original simply do:
myFunction = myFunctionBackup;

Modifier:

Ce que je suggère si vous devez réutiliser après cela est d'avoir le fonction d'origine comme sauvegarde. Utilisez ensuite la "puissance" de JS où les fonctions sont des variables . Voici le code que vous pouvez essayer:

function myFunction(ele) {
    myArray = [];
    this.num1 = $.each(ele, function(){
        var posx = ele.offset().top;
        myArray.push(pos);
        console.log('this is still execute after resize');
        $(window).on('scroll', function(){
            // abcxyz
        });
    });
}

var target = $('p');
var run = new myFunction(target);



  $(window).on('resize',function(){
        console.log("resized");
     if (typeof(myFunction) == "function"){
myFunction = undefined;
} 
    });


3 commentaires

Quelle erreur voyez-vous? C'est du code simple. Il y a peut-être une erreur dans le code mais la partie "myFunction = undefined" ne peut pas échouer.


Merci Sam. Je vais l'essayer demain et vous faire savoir si cela fonctionne.


Cela fonctionne maintenant. Cela détruit complètement ma fonction, est-ce que vous pouvez quand même la rappeler, au cas où je devrais la réutiliser.



0
votes

pour utiliser la fonction .off () , vous devez d'abord instancier l'événement avec la fonction .on () suivre l'exemple

function myFunction(ele) {
    myArray = [];
    this.num1 = $.each(ele, function(){
        var posx = ele.offset().top;
        myArray.push(pos);
        console.log('this is still execute after resize');
        $(window).on('scroll', function(){
            // abcxyz
        });
    });
}

var target = $('p');
var run = new myFunction(target);

$(function(){
   $(window).on('scroll', myFunction(target));
});

$(window).on('resize',function(){
    console.log("resized");
    $(window).off('scroll', myFunction(target));
});

p>


1 commentaires

Merci. Mais cette méthode déclenche $ .each à chaque fois que je fais défiler. Je ne sais pas vraiment si cela affecte les performances de mon site, je ne veux pas si c'est le cas.