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));
});
3 Réponses :
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");
});
Merci je vais l'essayer.
Mon plaisir @BaoPharm. Si cela fonctionne pour vous, votez pour moi. Merci
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;
}
});
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.
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>
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.
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 (...)etoff ('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èseoff ('scroll', myFunction)ou juste le nom de l'événementoff ('scroll'). Notez simplement queoff ('scroll', myFunction)ne fonctionnera toujours pas car vous n'utilisez jamais myFunction comme gestionnaire d'événements