2017-09-01 12 views
0

Ich möchte die Höhe eines Elements bei jeder Änderung der Site überprüfen, da die Größe des Ansichtsfensters oder ein Klickereignis geändert wurde.Höhe eines Elements dynamisch überprüfen

Im Moment bin ich mit dem folgenden Code:

jQuery(function ($) { 
    var height = document.getElementById("head").offsetHeight; 

    var x = document.getElementsByClassName("dropdown-menu"); 
    var i; 
    for (i = 0; i < x.length; i++) { 
     x[i].style.top = height + 'px'; 
    } 
}); 

Es ist möglich, dass die Höhe der „Kopf“ ändert. Daher muss ich die tatsächliche Höhe überprüfen, wenn Änderungen an der Site/im Ansichtsfenster vorgenommen werden.

Gibt es eine Möglichkeit, dies zu tun?

+0

Fertig. Posted as antwort – Cray

Antwort

0

Sie auf Fenstergröße ändern überprüfen

$(window).resize(function() { 
    //check element height 
}); 
+0

das funktioniert. Aber nur nach dem Klick. Und die Höhe ist falsch. Es ist korrekt, nachdem ich ein zweites Mal klicken – Cray

0

können Sie onResize Ereignis-Listener von Javascript verwenden

var header= document.getElementById("head") 
header.addEventListener('onresize', function(){ 
// do your code here 
}); 
+0

jetzt funktioniert es nicht mehr :( – Cray

+0

hast du einen event callback? –

+0

wie könnte ich das überprüfen? Vielleicht liegt es daran, dass es in "jQuery (function ($) {.....});" – Cray

0
var element = document.getElementById("head"), 
    height; 

function eventHandler() { 

    height = element.offsetHeight; 
    console.log(height); 

    // rest of your code 

} 

window.addEventListener('resize', eventHandler) 
element.addEventListener('click', eventHandler) 

Sie können zwei verschiedene Ereignis-Listener binden und die gleiche Funktion wie ein Rückruf übergeben wenn Sie Code-Logik teilen und Redundanz reduzieren möchten.

+0

können Sie erklären, welche meiner Code in Ihrer Funktion sein sollte? – Cray

+0

Mein Code ist innerhalb von jQuery " jQuery (function ($) {.....}); "Gibt es irgendetwas zu ändern? – Cray

+0

All Ihre Variable Caching kann außerhalb von' eventHandler() 'als das getan werden y nicht ändern. Inside setzen eine Logik, um '.top' Styling zu aktualisieren, also in Ihrem Fall eine' for' Schleife und der Körper dieser Schleife. Also nimm alle 'document.getElement ...' außerhalb von eventHandler, setze Rechenhöhe in 'eventHandler()' und 'for' Schleife, die eine' top' Position innerhalb von – Melcma

0

Meine Lösung:

$(window).ready(function() { 
    var height = document.getElementById("head").offsetHeight; 

    var x = document.getElementsByClassName("dropdown-menu"); 
    var i; 
    for (i = 0; i < x.length; i++) { 
     x[i].style.top = height + 'px'; 
    } 
}); 

$(window).click(function() { 
    setTimeout(function() { 
     var height = document.getElementById("head").offsetHeight; 

     var x = document.getElementsByClassName("dropdown-menu"); 
     var i; 
     for (i = 0; i < x.length; i++) { 
      x[i].style.top = height + 'px'; 
     } 
    }, 500); 
}); 

$(window).resize(function() { 
    var height = document.getElementById("head").offsetHeight; 

    var x = document.getElementsByClassName("dropdown-menu"); 
    var i; 
    for (i = 0; i < x.length; i++) { 
     x[i].style.top = height + 'px'; 
    } 
}); 

Der Timeout ist für die richtige Höhe nach dem Klick und eine Animation.

Verwandte Themen