当它到达固定导航时,仅淡出 div 的顶部

Posted

技术标签:

【中文标题】当它到达固定导航时,仅淡出 div 的顶部【英文标题】:Fade only top part of div out as it reaches fixed navigation 【发布时间】:2014-03-25 13:12:26 【问题描述】:

我正在尝试淡化我的内容的顶部,因为它到达具有半透明背景的固定导航栏。我已经让它有点工作了,但你会看到 2 个问题:

    所有内容都会淡出,而不仅仅是接近固定导航的内容。内容应以逐行速率淡出。 由于选择器类,所有其他 div 的所有内容都消失了。

如果有任何帮助,我将不胜感激!谢谢

var divs = $('.section').children();
$(window).on('scroll', function() 
  var st = $(this).scrollTop();
  divs.css( 'opacity' : (1 - st/20) );
);

到目前为止的 JS Fiddle:http://jsfiddle.net/x5JKC/

【问题讨论】:

【参考方案1】:

LIVE DEMO

var $section = $('.section');
var $window = $(window);
var fadeAt = 150; // start fade ad Npx from top
var zeroAt = 50 ; // Npx from top = 0 opacity

function fadeByApproach()
    var st = $window.scrollTop();
    $.each($section, function(idx, el)
        var secPos = $(el).offset().top - st;
        if(secPos<fadeAt)       // Ignores other sections
            var $ch = $('*', this); // all elements 
            $.each($ch, function()
                var top = $(this).offset().top - st;
                if(top<fadeAt)  // Ignores other childrrens
                    var opa = (top-zeroAt)/(fadeAt-zeroAt)/1;
                    $(this).html("TOP: "+top +'<br> Current Opacity: '+ opa);
                    this.style.opacity = opa;
                
            );
        
    );


$(window).on('scroll load resize', fadeByApproach);

您可能希望在滚动时运行您的函数,但也像我一样在加载和调整窗口大小时运行。

【讨论】:

为了避免性能下降,你有没有关于如何淡化元素而不淡化它们被放置的整个容器的建议?当页面顶部点击导航栏时,它们通常仍会在页面底部读取内容。 @BHOLT 完成。编辑。请注意if(secPos&lt;fadeAt),这将阻止我们的脚本查找* 位置高于“我们感兴趣的值”的部分的所有后代元素。 + 我为您添加了一种方法来处理从哪里开始淡化元素以及在哪里(顶部位置)结束(零)不透明度。【参考方案2】:

我修改了你的代码:

$(window).on('scroll', function () 
    $('.section').each(function (index, item) 
        $(item).children().each(function (indexChild, child) 
            var st = $(window).scrollTop();
            st = $(window).scrollTop() - $(child).offset().top + 10;
            $(child).css( 'opacity': (1 - st / 20) );
        );

    );
);

http://jsfiddle.net/x5JKC/3/

编辑除数 (20) 或移除 +10 以减少/增加效果。

编辑:评论改变了隐藏元素的方法(渐进式隐藏在大元素上),然后尝试使用渐变作为蒙版并随着滚动向下增长:

<div class="section red">
    <div class="mask red"> </div>
    <h1>section headline</h1>
    <p>first paragraph</p>
    <p>second paragraph</p>
    <p>third paragraph</p>
</div>

.mask.red
    position:absolute;
    width:100%;
    height:1px;
    background: -webkit-linear-gradient(red, rgba(255,0,0,0)); /* For Safari 5.1 to 6.0 */
    background: -o-linear-gradient(red, rgba(255,0,0,0)); /* For Opera 11.1 to 12.0 */
    background: -moz-linear-gradient(red, rgba(255,0,0,0)); /* For Firefox 3.6 to 15 */
   background: linear-gradient(red, rgba(255,0,0,0)); /* Standard syntax */


$(window).on('scroll', function () 
    $('.section .mask').each(function (index, item) 
            var heightMask = $(window).scrollTop() - $(item).offset().top+90;
        console.log(heightMask);
        $(item).css(height:heightMask);
        );
);

【讨论】:

这几乎可以做到。有些地方我需要选择比下一层更深的地方,所以children() 一次清除所有内容而不是一个元素。我尝试用find() 替换它,但没有得到任何结果。更新了 JS Fiddle 以重新创建正在发生的事情:jsfiddle.net/x5JKC/6 这对我来说并没有什么不同。它仍在一次清除所有内部元素。 哈抱歉,没看懂你最后的评论。您希望所有项目在内容的任何深度都自行消失? 是的,如果可能的话。我试图解决的问题是,有时会显示内容的上半部分,但不会显示下半部分。即:一张高大的照片。底部应仍为不透明度 1,而顶部为 0。 好的,我改变了我的方法并使用了在文本上向下生长的渐变(透明颜色),看看红色容器。 jsfiddle.net/x5JKC/11

以上是关于当它到达固定导航时,仅淡出 div 的顶部的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap 3 固定顶部导航栏显示水平滚动

固定/粘性/浮动顶部菜单导航栏的正确名称 [关闭]

固定导航上所有div上方的Jquery滑块

底部对齐的导航棒滚动到顶部

如何淡出导航栏的最右侧并向其添加新按钮

JQueryMobile 淡出导航栏