我有一个固定高度的 div 和 overflow:hidden;
我想用 jQuery 检查 div 是否有元素溢出超过 div 的固定高度。我怎样才能做到这一点?
我有一个固定高度的 div 和 overflow:hidden;
我想用 jQuery 检查 div 是否有元素溢出超过 div 的固定高度。我怎样才能做到这一点?
您实际上不需要任何 jQuery 来检查是否发生溢出。使用element.offsetHeight
,element.offsetWidth
,element.scrollHeight
和element.scrollWidth
可以判断,如果你的元素有比它的规模更大的内容:
if (element.offsetHeight < element.scrollHeight ||
element.offsetWidth < element.scrollWidth) {
// your element have overflow
} else {
// your element doesn't have overflow
}
参见实际示例:Fiddle
但是,如果您想知道元素中的哪个元素可见或不可见,则需要进行更多计算。就可见性而言,子元素有三种状态:
如果您想计算半可见项目,这将是您需要的脚本:
var invisibleItems = [];
for(var i=0; i<element.childElementCount; i++){
if (element.children[i].offsetTop + element.children[i].offsetHeight >
element.offsetTop + element.offsetHeight ||
element.children[i].offsetLeft + element.children[i].offsetWidth >
element.offsetLeft + element.offsetWidth ){
invisibleItems.push(element.children[i]);
}
}
如果你不想计算半可见的,你可以稍微计算一下。
我和 OP 有同样的问题,但这些答案都不符合我的需求。我需要一个简单的条件,为了一个简单的需要。
这是我的回答:
if ($("#myoverflowingelement").prop('scrollWidth') > $("#myoverflowingelement").width() ) {
alert("this element is overflowing !!");
}
else {
alert("this element is not overflowing!!");
}
此外,您还可以改变scrollWidth
的scrollHeight
,如果你需要测试这两种情况下。
部分基于 Mohsen 的回答(添加的第一个条件涵盖了孩子隐藏在父母之前的情况):
jQuery.fn.isChildOverflowing = function (child) {
var p = jQuery(this).get(0);
var el = jQuery(child).get(0);
return (el.offsetTop < p.offsetTop || el.offsetLeft < p.offsetLeft) ||
(el.offsetTop + el.offsetHeight > p.offsetTop + p.offsetHeight || el.offsetLeft + el.offsetWidth > p.offsetLeft + p.offsetWidth);
};
然后就这样做:
jQuery('#parent').isChildOverflowing('#child');
一种方法是针对自身检查 scrollTop。给内容一个大于其大小的滚动值,然后检查它的 scrollTop 是否为 0(如果不是 0,则表示溢出。)
所以我使用了溢出的jquery库:https : //github.com/kevinmarx/overflowing
安装库后,如果要将类分配overflowing
给所有溢出元素,只需运行:
$('.targetElement').overflowing('.parentElement')
这将给 class overflowing
,就像 <div class="targetElement overflowing">
所有溢出的元素一样。然后,您可以将其添加到某个事件处理程序(单击、鼠标悬停)或其他将运行上述代码的函数中,以便它动态更新。