Javascript 创建有时固定位置的div,与JQ逻辑有关
这个想法: 我正在创建一个div,它将更改为position:fixed,只要div的顶部接触到浏览器窗口的顶部,该div就会浮动。可在此处找到此行为的示例以及使其工作的代码: 问题是: 我实现这段代码的站点有一个相当大的页脚,所以如果浏览器窗口足够短,那么位置:fixed div将在页脚上滚动。理想的行为是:fixed div不滚动到页脚,而是从底部向外滚动。我还没走那么远。目前,我正在检查#fixie_容器底部是否超过.footer_容器顶部,如果是,则通过删除.fixie_容器的fixed类,从#fixie_容器中删除position:fixed属性。但这会导致问题行为。一旦#fixie_容器的底部超过了.footer_容器的顶部,就会删除并快速添加.fixie_container_fixed类,从而导致#fixie_容器快速闪烁 很明显,我的逻辑中有一个bug,但是,作为JS/JQ的新手,我不确定它是什么。任何指点都将不胜感激 HTML: 我有一个页面,有一个正文和一个右小栏。浮动div位于右列的底部。当div的顶部碰到viewtop的顶部时,将应用“位置:固定”属性Javascript 创建有时固定位置的div,与JQ逻辑有关,javascript,jquery,Javascript,Jquery,这个想法: 我正在创建一个div,它将更改为position:fixed,只要div的顶部接触到浏览器窗口的顶部,该div就会浮动。可在此处找到此行为的示例以及使其工作的代码: 问题是: 我实现这段代码的站点有一个相当大的页脚,所以如果浏览器窗口足够短,那么位置:fixed div将在页脚上滚动。理想的行为是:fixed div不滚动到页脚,而是从底部向外滚动。我还没走那么远。目前,我正在检查#fixie_容器底部是否超过.footer_容器顶部,如果是,则通过删除.fixie_容器的fixed
<div id="fixie_placeholder">
<div id="fixie_container">
THIS CONTENT WILL HOVER
</div>
</div>
<div class="footer_container">
THIS IS THE FOOTER
</div>
JQuery:
<script type="text/javascript">
jQuery(function($){
var placeholder = $("#fixie_placeholder");
var container = $("#fixie_container");
var block = $(".footer_container");
var view = $(window);
view.bind("scroll resize", function(){
var placeholderTop = placeholder.offset().top;
var containerBottom = container.offset().top + container.height();
var blockTop = block.offset().top;
var viewTop = view.scrollTop();
if ((viewTop > placeholderTop) && !container.is(".fixie_container_fixed") && (containerBottom < blockTop)){
placeholder.height(placeholder.height());
container.addClass("fixie_container_fixed");
}
else if ((viewTop <= placeholderTop) && container.is(".fixie_container_fixed") || (containerBottom >= blockTop)){
placeholder.css("height", "auto");
container.removeClass("fixie_container_fixed");
}
});
});
</script>
jQuery(函数($){
变量占位符=$(“固定占位符”);
变量容器=$(“固定容器”);
变量块=$(“.footer_容器”);
变量视图=$(窗口);
view.bind(“滚动调整大小”,函数(){
var placeholder top=placeholder.offset().top;
var containerBottom=container.offset().top+container.height();
var blockTop=block.offset().top;
var viewTop=view.scrollTop();
如果((视图顶部>占位符顶部)&&!container.is(“.fixie\u container\u fixed”)&&(containerBottom
查看此JSFIDLE:
当文档滚动过标题时,我只是将标题设置为position:fixed
,当用户滚动到标题上方或到达页面顶部时,将其返回到position:relative
(通过css类)。为了使页脚保持在页脚后面,我将页脚设置为z-index:10000
和position:absolute
,并将其放在一个容器div中,该容器div为position:relative
,这样它仍然放在页面的末尾
Javascript:
CSS:
HTML:
标题
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
高脚
<script type="text/javascript">
jQuery(function($){
var placeholder = $("#fixie_placeholder");
var container = $("#fixie_container");
var block = $(".footer_container");
var view = $(window);
view.bind("scroll resize", function(){
var placeholderTop = placeholder.offset().top;
var containerBottom = container.offset().top + container.height();
var blockTop = block.offset().top;
var viewTop = view.scrollTop();
if ((viewTop > placeholderTop) && !container.is(".fixie_container_fixed") && (containerBottom < blockTop)){
placeholder.height(placeholder.height());
container.addClass("fixie_container_fixed");
}
else if ((viewTop <= placeholderTop) && container.is(".fixie_container_fixed") || (containerBottom >= blockTop)){
placeholder.css("height", "auto");
container.removeClass("fixie_container_fixed");
}
});
});
</script>
$(document).ready(function(){
$(window).bind("scroll resize", function(){
var scrollTop = $(window).scrollTop();
var headerTop = $("#header").offset().top;
if (scrollTop >= headerTop && scrollTop !== 0) { // Scrolled past top of header, but not at the top of the page
$("#header").addClass("fixed");
} else {
$("#header").removeClass("fixed");
}
});
});
#container { padding-top: 25px; }
#header, #content, #footer { width: 400px; }
#header { z-index: 9999; top: 0;
background: blue; }
#header.fixed { position: fixed; }
#content { background: green; }
.box { width: 300px; height: 300px; background: purple; display: inline-block; }
#footerContainer { height: 400px; position: relative; }
#footer { background: red; z-index: 10000; position: absolute; }
<div id="container">
<div id="header">
Header
</div>
<div id="content">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
<div id="footerContainer">
<div id="footer">
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
Tall Footer<br/>
</div>
</div>
</div>