我有2个div,另一个嵌套在另一个中。我想得到相对于浏览器窗口的子div位置。用例是这样的:当用户向下滚动浏览器时,我想检测子div的位置,如果它比浏览器窗口底部高100px,我想慢慢淡出它。
我如何使用jQuery做到这一点? 2个div具有相对位置或绝对位置,但不是固定位置。
答案 0 :(得分:2)
试试这个:
$(window).scroll(function () {
var distanceFromBottom = 100;
if ( ( $("#outerdiv").offset().top + $("#innerdiv").height() - $(window).scrollTop() ) > $(window).height() - distanceFromBottom ) {
$("#innerdiv").fadeOut("slow");
} else {
$("#innerdiv").fadeIn("slow");
}
})
你没有说明你是否希望#innerdiv
从底部大于100像素时淡入,但我写了这个假设你做了...在这种情况下,你需要检测#outerdiv
的偏移,如果你希望#innerdiv
淡入,因为一个不可见的元素没有位置。
如果您不希望#innerdiv
淡入,请更改if语句以查看#innerdiv
元素并删除该函数的else部分。
编辑:看看你的示例页面,我猜你想要这个效果在音乐播放器上运行。因为,使用jQuery淡化或慢慢隐藏嵌入对象可能不是最好的主意 - 它只是没有动画效果 - 所以,我只是突然做到了。上面的脚本仍然有效,但正如您在下面的修订版中看到的那样,您不必使用2个Div,我使用了div和其中的嵌入对象。外部div应紧密包装内部div以使此脚本起作用,因此在这种情况下你不能使用id为“container-msg”的div。
$(window).scroll(function () {
var distanceFromBottom = 100;
if ( ( $(".windowMediaPlayer").offset().top + $(".windowMediaPlayer object").height() - $(window).scrollTop() ) > $(window).height() - distanceFromBottom ) {
$(".windowMediaPlayer object").hide();
} else {
$(".windowMediaPlayer object").show();
}
})
我修改了您的示例并将其保存到this pastebin,以便您可以看到它正常工作。
编辑:哎呀,你说你希望它在接近底部时消失......我只是改变了“<”到“>”现在它应该做你想要的。我也更新了pastebin代码。
答案 1 :(得分:0)
var inner_offset = $("#innerdiv").offset();
var window_size = $(window).height();
if( ( inner_offset.top + $("#innerdiv").height() ) > window_size - 100 )
$("#innerdiv").fadeOut("slow");
没有经过审查,但应该给你一般的想法。
答案 2 :(得分:-1)