如何防止div离开屏幕



我想在stackoverflow的提问页面上做一些类似于"如何格式化"的事情。

原来divposition:relative。当div的任何部分出屏时,变为position:fixed

如何实现?

更准确地说,我想要的是:

开始时,div是从窗口顶部的Xpx。
当我向下滚动(X+Y)px时,通常情况下,div的顶部Ypx部分将被隐藏。
但我希望整个div被固定在窗口的顶部。例如{位置:固定;:0}
如果我向上滚动,div会从窗口顶部回到Xpx。

更准确地说,我想要一个更漂亮的代码:
$(document).ready(function()
{
    var e = $('#myDiv');
    var offsetTop = e.offset().top;
    var positionTop = e.position().top;
    $(window).scroll(function() {
        if($(window).scrollTop() > offsetTop) {
            e.css({'position' : 'fixed', 'top' : '0px'});
        }
        else {
            e.css({'position': 'relative', 'top': positionTop});
        } 
    });
});
$(document).ready(function()
{
    var e = $('#myDiv');
    var jWindow = $(window);
    var offsetTop = e.offset().top;
    var positionTop = e.position().top;
    jWindow.scroll(function()
    {
        if(jWindow.scrollTop() > offsetTop)
            e.css({'position':'fixed', 'top':0});
        else
            e.css({'position':'relative', 'top':positionTop});
    });
});

我写了一段真正有效的代码:

$(document).ready(function()
{
    var e = $('#myDiv');
    var offsetTop = e.offset().top;
    var positionTop = e.position().top;
    $(window).scroll(function(event) {
        if($(window).scrollTop() + 20 > offsetTop) {
                e.css({'position' : 'fixed', 'top' : '20px'});
        }
        else {
            e.css('position', 'relative');
            e.css('top', positionTop);
        } 
    });
});

但我想知道是否有更好的解决方案。

我改编了@lai-yu-hsuan上面的代码,但它不起作用。如果你向上滚动,粘性元素会在初始滚动后消失,但这对我来说是有效的。我希望这能帮助到一些人!请注意,我将sticky元素更改为一个类,"sticky-top",以便它可以应用于多个容器。

jQuery(document).ready(function()
{
    var e = jQuery('.sticky-top');
    var offsetTop = e.offset().top;
    var positionTop = e.position().top;
    var positionLeft = e.position().left;
    var stickyWidth=e.width();
    var stickyHeight=e.height();
    jQuery(window).scroll(function(event) {
        if(jQuery(window).scrollTop() + 20 > offsetTop) {
                e.css({'position' : 'fixed', 'top' : '20px','left':positionLeft+'px'});
                e.css({'width':stickyWidth+'px','height':stickyHeight+'px'});
        }
        else {
                   e.css('position', 'relative');
                   e.css('top', '');
                   e.css('left','');
        } 
    });
});

最新更新