2017-09-01 85 views
0

我想检查每次网站更改时元素的高度,因为视口调整大小或点击事件。动态检查元素的高度

目前我使用下面的代码:

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'; 
    } 
}); 

这有可能是的“头”的高度变化。所以我需要检查实际高度,如果在网站/视口有任何更改。

有没有办法做到这一点?

+0

完成。作为回答 – Cray

回答

0

您可以检查窗口调整

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

这的工作,但点击后只和高度是错误的我点击第二次 – Cray

0

您可以使用JavaScript在onResize事件侦听器

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

现在它不工作了:( – Cray

+0

你有没有得到事件回调? –

+0

我怎么能检查?可能是因为它是在“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) 

您可以绑定两个不同的事件侦听器,并通过相同的功能回调如果你想共享代码逻辑并减少冗余。

+0

你能解释一下后它是正确的,其中我的代码应该是在你的函数 – Cray

+0

我的代码是jQuery的内部“ jQuery(function($){.....});“有什么要改变吗? – Cray

+0

所有的变量缓存都可以在'eventHandler()'之外完成,因为你不会改变。里面放置了一个逻辑来更新'.top'样式,所以在你的情况下,'for'循环和这个循环的主体。因此,在eventHandler之外取出所有'document.getElement ...',并在'eventHandler()'和'for'循环内部计算高度,以在 – Melcma

0

我的解决办法:

$(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'; 
    } 
}); 

超时对于点击动画后正确的高度。