2009-07-06 5 views
0

Je le code suivant dans un fichier JavaScript:script Redimensionner ajoute objet, fait encore et encore

$(document).ready(function() { 
    detectscreen(); 
}); 

$(window).resize(function(){ 
     detectscreen(); 
    }); 

    function windowWidth() { 
     if(!window.innerWidth) { 
      // user is being a git, using ie 
      return document.documentElement.clientWidth; 
     } else { 
      return window.innerWidth; 
    }} 

    function detectscreen() { 
     if (windowWidth()>1280) { 
      $('body').append('<div id="gearsfloat"></div>'); 
    }} 

Fondamentalement, ce qu'il fait est ajouter un objet à la fin du document si la largeur est moins de 1280 pixels, cependant, ceci est ajouté à chaque fois que la page est redimensionnée.

Je ne pense pas que je puisse utiliser la fonction once car elle ne l'exécuterait qu'une seule fois et la prochaine fois qu'elle est redimensionnée, elle est morte. Tout ce que je peux faire?

 

NOTE: Je, en fait, ne le veux à vérifier sur le redimensionnement de la page, mais l'effet est que cela se produit encore et encore.

if (windowWidth()>1280 && !$('gearsfloat')) { 
    $('body').append('<div id="gearsfloat"></div>'); 
} 

ci-dessus (par Jason) fonctionne ne fait pas travail, mais il ne supprimera pas quand il obtient moins de 1280. Est-ce que je peux faire?

+0

pointe de style - vous pouvez faire: fenêtre de retour. innerWidth || document.documentElement.clientWidth; dans votre fonction pour retourner ce qui est défini –

Répondre

1

Notez si l'élément existe ou non et ajoutez/supprimez-le lorsque la condition change. De cette façon, vous ne l'ajouter une fois, il sera supprimé quand il ne devrait pas être là, et vous ne faites pas unneccesary ajout ou la suppression:

var gearsExists = false; 

function detectscreen() { 
    var shouldExist = windowWidth() > 1280; 
    if (shouldExist != gearsExists) { 
     if (shouldExist) { 
     $('body').append('<div id="gearsfloat"></div>'); 
     } else { 
     $('#gearsfloat').remove(); 
     } 
     gearsExists = shouldExist; 
    } 
} 
+0

Wow, ça marche très bien. Merci beaucoup! –

+0

Vous pouvez facilement réécrire ceci pour se débarrasser de la variable globale, ou utiliser une fermeture: function detectscreen() { var shouldExist = windowWidth()> 1280, Engrenages = $ ('# gearsFloat'); if (shouldExist) { if (! Gears) { $ ('body'). Append ('

'); } } else { si (engrenages) { gears.remove(); } } gearsExists = shouldExist; } } – PatrikAkerstrand

1
if (windowWidth()>1280 && !$('gearsfloat')) { 
    $('body').append('<div id="gearsfloat"></div>'); 
} 

Vérifiez si l'élément existe déjà en premier?

+0

Cela ne fonctionne pas pour une raison quelconque, et l'élément doit être supprimé si l'écran est redimensionné à moins de 1280 à nouveau. –

0

Si vous ne voulez pas que la fonction soit appelée lorsque la fenêtre est redimensionnée, alors pourquoi liez-vous la fonction de redimensionnement?

la fonction de document prêt ne sera jamais appelée avant la fonction de redimensionnement, de sorte que votre élément sera garanti?

Questions connexes