到达页面底部后更改固定定位元素的边距顶部位置?

Posted

技术标签:

【中文标题】到达页面底部后更改固定定位元素的边距顶部位置?【英文标题】:Change margin-top position of an fixed positioned element after reaching the bottom of the page? 【发布时间】:2012-09-13 20:00:13 【问题描述】:

我需要使用垂直滚动条在到达页面底部(或距底部 200px)后将固定 div 元素的上边距从 margin-top: 200px 更改为 margin top 0px。

如果滚动回顶部,则切换返回。

我猜一些 javascript/jQuery 代码可以做到这一点。

我的 html/布局代码:

<div id="header" style="position: fixed; margin-top: 0px;">
     Header content
</div>
<div id="main">
    <div id="left" style="position: fixed; margin-top: 200px;">Google Ads here</div>
    <div id="right">Content posts here</div>
</div>
<div id="footer">
    Footer content
</div>

编辑:这里有一些图片可以让我的问题更清楚。

    加载页面时的正常状态:

    向下滚动时出现问题,并且 google ads 列与页脚冲突:

    需要如何解决:

【问题讨论】:

是的,Javascript 可以做到。 一个 position='fixed' 的元素不在文档流中并且没有边距。您可以更改最高值... 你能说清楚吗?据我了解,您在距顶部 200 像素处有一个 div。您希望在滚动页面时逐渐移到顶部。当您在文档末尾滚动时,它应该在顶部的 0px 处?我说的对吗? 【参考方案1】:

对于这个问题,你应该在 css 中使用 z-index

【讨论】:

【参考方案2】:

德夫德……

瞧,我提出的解决方案:

http://jsfiddle.net/YL7Jc/2/

动画有点生涩,但我认为它可以满足您的需求

(这是我对之前的 s/o 帖子的看法:Can I keep a DIV always on the screen, but not always in a fixed position?)

让我知道你的想法!

【讨论】:

我错过了什么?这没有成功吗?附言感谢投票的人:-)【参考方案3】:

嗨,首先你应该在标记别人之前更清楚,因为每个人都给出类似的答案然后它表明问题不明确。

请参阅Js Fiddle 以获得潜在的修复,请根据需要调整像素等

【讨论】:

【参考方案4】:

HTML

<div id="main" style="width: 960px; margin: 0px auto;"> 
    <div id="left" style="position: fixed; top: 200px; left: 0px; background: #000; width: 100%; color: #fff;">Google Ads here</div> 
    <div id="right"></div> 
</div> 

JAVASCRIPT

<script type="text/javascript">
    $(function() 
        var documentHeight = $(document).height();
        var windowHeight = $(window).height();
        var left = $('#left');
        var leftTopPosition = $('#left').css('top');
        leftTopPosition = parseInt(leftTopPosition.substring(0, leftTopPosition.length-2));             

        $(window).scroll(function()
            var pageOffsetY = window.pageYOffset;           
            if((documentHeight - pageOffsetY - windowHeight) <= 200 && leftTopPosition == 200) 
                left.stop().animate(
                    'top': '0px'
                );

                leftTopPosition = 0;
            

            else if((documentHeight - pageOffsetY - windowHeight) > 200 && leftTopPosition == 0) 
                left.stop().animate(
                    'top': '200px'
                );

                leftTopPosition = 200;
            
        );
    );

</script>

【讨论】:

谢谢,我明天试试。今天我还有太多其他的工作。【参考方案5】:

尝试下面将事件绑定到window.scroll 的代码,以检查页面是否到达底部(200 像素的底部)并将#left 移动到顶部(margin-top: 0)..

DEMO: http://jsfiddle.net/6Q6XY/4/(添加了一些演示代码以查看它何时触底。)

$(function() 
    var $left = $('#left');

    $(window).bind('scroll', function()    
        if (($(document).height() 
               - (window.pageYOffset + window.innerHeight)) < 200)                 
            $left.css('marginTop', 0);
         else 
            $left.css('marginTop', 200);
        
    );
);

参考:https://***.com/a/6148937/297641

【讨论】:

嗯,我需要一些不同的东西。我用更多信息和图片编辑了我的问题。 @Derfder 请发布 layout/html 和相应的 css,以便我们可以使用它 #header 和 #left 是固定的,其他 div 是 position: relative 和 float: left。样式、边距和 z-index 对我来说不是问题。唯一的问题是在向下滚动并开始使用谷歌广告向上移动左侧 div 时检测结束(从底部开始 200 像素),因此页脚不会干扰它们。当我滚动到顶部时,反之亦然。 @Derfder 这不适合您.. 我们需要查看您的 html 和 css 以了解您是如何修复此 #left#top 的。修复这个小提琴jsfiddle.net/6Q6XY/5中的html,就像你在你的应用程序中一样。【参考方案6】:

试试这个:

$(window).bind('scroll', function()
   if(($(window).height()-$(window).scrollTop())<200)
   
       $('#left').css('margin-top',$(window).scrollTop());
   
   else
   
       $('#left').css('margin-top',200);
   
);

【讨论】:

它正在制作奇怪的东西。你试过你的代码吗?它使我的页面更长和东西。也不工作;(。【参考方案7】:

您需要实现窗口滚动功能,这是一个 jquery 实现,所以请确保您包含最新的 jquery 库

$(window).scroll(function () 
        if ($(window).scrollTop() + $(window).height() == $(document).height()) 

            //if it hits bottom
            $('#left').css("margin-top", "0px");

        
        else 

            $('#left').css("margin-top", "200px");

        
    );

【讨论】:

不工作,即使我改变 $('#left').css("margin-top", "0px"); for alert("bottom!"; 没有任何警报。我尝试了使用和不使用 $(document).ready (function () //code ); 你的代码不起作用;( 它确实有效,也许如果你粘贴你的代码以便我们检查你做错了什么js-fiddle【参考方案8】:

试试这样的方法

      if ($(window).scrollTop() == $(document).height() - $(window).height())   
           
              document.getElementById(yourid).setAttribute("style","margin-top:0px");
           

【讨论】:

以上是关于到达页面底部后更改固定定位元素的边距顶部位置?的主要内容,如果未能解决你的问题,请参考以下文章

绝对定位 div 的边距底部在 Chrome 中工作,但在 Safari 或 Firefox 中不可用

html css 返回顶部按钮位置怎么固定?

仿淘宝固定侧边栏

移动端fixed定位固定在底部 ios手机里为啥会遮住一半 滑动一下才显示全部 css

一个 div 的 CSS 绝对定位受无关 div 中的边距影响

盒子模型和布局