Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery:定位一个div,用溢出填充容器div的可见部分_Javascript_Jquery_Css_Positioning - Fatal编程技术网

Javascript jQuery:定位一个div,用溢出填充容器div的可见部分

Javascript jQuery:定位一个div,用溢出填充容器div的可见部分,javascript,jquery,css,positioning,Javascript,Jquery,Css,Positioning,我很难让覆盖显示在另一个div的可见部分的顶部。问题是,容器div已溢出,如果用户已在该div内滚动,覆盖将不会覆盖滚动部分。我的问题是:如何使用jQuery定位一个div以填充另一个div的可见部分?或者,有没有一种方法可以仅使用CSS来实现这一点 ,以下是标记: HTML 和JS(在DOM就绪时加载) 您可以使用DOM属性scrollHeight: $('div.container').click(function(){ $('div.overlay').css("height",

我很难让覆盖显示在另一个div的可见部分的顶部。问题是,容器div已溢出,如果用户已在该div内滚动,覆盖将不会覆盖滚动部分。我的问题是:如何使用jQuery定位一个div以填充另一个div的可见部分?或者,有没有一种方法可以仅使用CSS来实现这一点

,以下是标记:

HTML

和JS(在DOM就绪时加载)


您可以使用DOM属性
scrollHeight

$('div.container').click(function(){
    $('div.overlay').css("height", this.scrollHeight).toggle();
});


编辑:

为了仅覆盖可见部分,可以使用以下方法:

$('div.container').click(function(){
    $('div.overlay').css({
        top: this.scrollTop,
        height: $('div.container').css("height")})
    .toggle();
});

您可以使用DOM属性
scrollHeight

$('div.container').click(function(){
    $('div.overlay').css("height", this.scrollHeight).toggle();
});


编辑:

为了仅覆盖可见部分,可以使用以下方法:

$('div.container').click(function(){
    $('div.overlay').css({
        top: this.scrollTop,
        height: $('div.container').css("height")})
    .toggle();
});

为了达到你的要求,我做了以下几点

CSS

.container {
    /* setting this to relative means 
       overlay is positioned relative to its parent */
    position: relative; 
}
.overlay {
    /* element taken out of normal flow */
    position: absolute;
    /* removed bottom and right properties otherwise
       updating top property has no effect */
    height: 100px;
    /* When scrollbar appears width decreases to less than
       100px hence having to set to 100% to allow automatic calculation */
    width: 100%;
}
JavaScript

现在,我使用jQuery适当地设置top属性

$(".container").scroll( function( ) {
    $(".overlay").css({ top: $(this).scrollTop( ) });
});

小提琴

为了达到你的要求,我做了以下几件事

CSS

.container {
    /* setting this to relative means 
       overlay is positioned relative to its parent */
    position: relative; 
}
.overlay {
    /* element taken out of normal flow */
    position: absolute;
    /* removed bottom and right properties otherwise
       updating top property has no effect */
    height: 100px;
    /* When scrollbar appears width decreases to less than
       100px hence having to set to 100% to allow automatic calculation */
    width: 100%;
}
JavaScript

现在,我使用jQuery适当地设置top属性

$(".container").scroll( function( ) {
    $(".overlay").css({ top: $(this).scrollTop( ) });
});

小提琴

假设您真的只想覆盖可见部分:


div.overlay{
显示:无;
位置:绝对位置;
排名:0;
左:0;
右:0;
高度:100px;/*固定高度,由CSS或javascript设置,无底部*/
背景:#F00;
不透明度:0.5;
}
$('div.container')。单击(函数(){
$('div.overlay').css('top',$('div.container').scrollTop()+'px').toggle();
});​

这会将覆盖层定位到容器可见部分的顶部。

假设您真的只想覆盖可见部分:


div.overlay{
显示:无;
位置:绝对位置;
排名:0;
左:0;
右:0;
高度:100px;/*固定高度,由CSS或javascript设置,无底部*/
背景:#F00;
不透明度:0.5;
}
$('div.container')。单击(函数(){
$('div.overlay').css('top',$('div.container').scrollTop()+'px').toggle();
});​

这会将覆盖层定位到容器可见部分的顶部。

这会填充整个div,我想他只是想填充可见部分。嗯,是的,我也不是很确定:但由于所有内容都已覆盖(除了滚动条,但我认为这不是问题)…我希望覆盖层完全覆盖可见部分,但这是一个很好的后备策略。我暂时不回答这个问题。谢谢@安德鲁,你把可视部分叫什么?有滚动条吗?不,滚动条不需要盖上。我的意思是指当前可见的div内容区域。它填充了整个div,但我想他只是想填充可见部分。嗯,是的,我也不是很确定:但是由于所有内容都被覆盖(除了滚动条,但我认为这不是问题)…我更希望覆盖层完全覆盖可见部分,但这是一个很好的后备策略。我暂时不回答这个问题。谢谢@安德鲁,你把可视部分叫什么?有滚动条吗?不,滚动条不需要盖上。我的意思是div当前可见的内容区域。这很好,但不幸的是,我正在处理的真实世界容器是流体布局的一部分,必须绝对定位。正如我所展示的,容器标记和CSS几乎被卡住了。这很好,但不幸的是,我正在处理的真实世界的容器是流动布局的一部分,必须绝对定位。正如我所展示的,容器标记和CSS几乎被卡住了。