【问题标题】:Simple CSS change when another div hits top of page当另一个 div 到达页面顶部时,简单的 CSS 更改
【发布时间】:2014-06-21 09:58:12
【问题描述】:

我查看了不同的帖子并找到了类似的解决方案,但没有一个允许我做我需要的事情。我正在尝试复制在此 URL 上找到的效果 http://www.envisionboston.com/

当图像到达页面顶部时,徽标会切换并且 div 会更改大小...过去我找到了一种方法来设置某个 div 何时到达页面顶部,您可以更改或添加到 css 元素。

在它到达顶部之前<div class="topbar"> 当图像到达顶部时,您将其更改为类似<div class="topbar fixed">

我遇到的另一个问题是他们有 Headway 主题,它不允许我编辑所有内容,因此 div 位于 ID 而不是 CLASS 中,我不确定这是否会改变事情,但它可能会。

我知道这应该是我应该能够弄清楚的,但我已经研究了好几个小时了!

【问题讨论】:

  • 为 window.onscroll 设置一个监听器并检查 window.scrollY 属性。 IE。在您的事件监听器中, if(window.scrollY > scrollPoint) { changeDivSizeNStuff(); }

标签: javascript jquery html css


【解决方案1】:

所以,我花了一些时间在 stackoverflow 上找到了这个很好的答案,以更改滚动时的不透明度,并将其与有条件的类删除/添加相结合:

jsfiddle demo

超级有用的 stackoverflow 线程,带有指向 jsfiddle 的链接,用于更改滚动时的不透明度:

Change div opacity on scroll

就使图像看起来“更小”的效果而言,这实际上是一种错觉。图像的 div 溢出是隐藏的,因此在滚动事件中,javascript 会调整上边距,将其“向下推”。这实际上将图像推到其下方的 下。当我有更多时间时,我会看看我是否也可以将其纳入答案。干杯

具有所需效果的页面: http://www.envisionboston.com/

代码块由上面提到的 Stack 链接提供:

function fader() {
    var b = $('.blue'),
        wh = $(window).height(),
        dt = $(document).scrollTop(),
        elView, opacity;
        h = $("#headerArea").height();
    b.each(function () {
        elView = wh - ($(this).offset().top - dt);

        if (window.pageYOffset > (h + 50)) {
            $("#headerArea").removeClass("withHeader").addClass("withoutHeader");
        } else {
            $("#headerArea").removeClass("withoutHeader").addClass("withHeader");
        }
        if (elView > 0) { // Top of DIV above bottom of window.
            opacity = 1 - 1 / (wh + $(this).height()) * elView;
            if (opacity > 0) // Bottom of DIV below top of window.
            $(this).css('opacity', opacity);
        }
    });
}
// Event on scroll
$(document).bind('scroll', fader);


原答案:

根据您列出的“site.js”文件的链接,这是实现这一点的代码:

查看 HTML 文件,您会发现被引用的类“.main-image-wrapper”
代码检查是否存在所需的类

if (Y.one('.main-image-wrapper'))



然后说如果页面当前垂直位置大于主图高度+80像素,则添加一个隐藏页眉的类

if ( (window.pageYOffset > (this.mainImageHeight + 80)) ) {
                Y.one('body').addClass('header-hidden');

类被上面记录的条件的 else 删除。您还会注意到,在这个 else 条件下,标题高度也发生了变化。

  else {
            Y.one('body').removeClass('header-hidden');
            this.headerHeight = header.get('offsetHeight');
 }

有很多样式和其他细微之处正在发生,但基本上:检查您的 y 位置在页面上的位置,如果这大于您的图像高度 + 所需像素数(在这种情况下为 80),然后添加一个类隐藏标题;否则,显示它。

下面的完整代码块供您参考。

if (Y.one('html.no-window-orientation')) {
      var scrollStates = function () {
        if (Y.one('.main-image-wrapper')) {
          // 80 is main content padding
          if ( (window.pageYOffset > (this.mainImageHeight + 80)) ) {
            Y.one('body').addClass('header-hidden');
            this.headerHeight = header.get('offsetHeight');
            if (Y.one('.contact-inner-wrapper')) {
              Y.all('.contact-inner-wrapper').setStyle('marginTop', (this.headerHeight + 5));
            }
          } else {
            Y.one('body').removeClass('header-hidden');
            this.headerHeight = header.get('offsetHeight');
            if (Y.one('.contact-inner-wrapper')) {
              Y.all('.contact-inner-wrapper').setStyle('marginTop', (this.headerHeight + 5));
            }
          }
          Y.one('.main-image-wrapper').setStyle('opacity', (1 - (window.pageYOffset / parseInt(Y.Squarespace.Template.getTweakValue('bannerImageHeight'), 10))));
          Y.one('.main-image-wrapper').setStyle('top', -(window.pageYOffset / 3));
        } else {
          if ( (window.pageYOffset >= 80) ) {
            Y.one('body').addClass('header-hidden');
            this.headerHeight = header.get('offsetHeight');
            if (Y.one('.contact-inner-wrapper')) {
              Y.all('.contact-inner-wrapper').setStyle('marginTop', (this.headerHeight + 5));
            }
          } else {
            Y.one('body').removeClass('header-hidden');
            this.headerHeight = header.get('offsetHeight');
            if (Y.one('.contact-inner-wrapper')) {
              Y.all('.contact-inner-wrapper').setStyle('marginTop', (this.headerHeight + 5));
            }
          } 
        }
      };

  scrollStates();
  Y.one(window).on('scroll', function() {
    scrollStates();
  });
}

【讨论】:

  • 请添加一个解释它是如何工作的,以便 OP 理解它
  • 当然! Stackrookie,请随时提出任何其他编辑/改进建议。
【解决方案2】:

感谢您的反馈,它已被使用并且确实有帮助,我所做的如下,如果您有任何提示,因为我做了一些不是最好的方法,请告诉我,因为我还在学习 jQuery

谢谢

<script>


jQuery(function ($) {

  $(window).load(function() {

    if ( $('.home').length) { 

    $(window).scroll(function() {
      var height = $(window).scrollTop();
          if(height  > 500 ) {
            $('#wrapper-7').addClass( "wrapper-7-changed" ); 
            $('.wrapper-mirroring-7').addClass( "wrapper-mirroring-7-changed" ); 
            $('.social-icon').addClass( "social-icon-changed" ); 
            $('#block-7 li.widget').addClass( "widget-changed" );

            $('#block-1').addClass( "block-1-changed" );

            $('#block-9').addClass( "block-9-changed" );

            $('#wrapper-6').addClass( "wrapper-6-changed" );
            $('.wrapper-mirroring-6').addClass( "wrapper-mirroring-6-changed" );

          } else {
            $('#wrapper-7').removeClass( "wrapper-7-changed" );
            $('.wrapper-mirroring-7').removeClass( "wrapper-mirroring-7-changed" ); 
            $('.social-icon').removeClass( "social-icon-changed" );
            $('#block-7 li.widget').removeClass( "widget-changed" );
            $('#block-1').removeClass( "block-1-changed" );
            $('#block-9').removeClass( "block-9-changed" );
            $('#wrapper-6').removeClass( "wrapper-6-changed" );
            $('.wrapper-mirroring-6').removeClass( "wrapper-mirroring-6-changed" );
          }   

       });

    } else {

    $(window).scroll(function() {
      var height = $(window).scrollTop();
          if(height  > 50 ) {
            $('#wrapper-7').addClass( "wrapper-7-changed" ); 
            $('.wrapper-mirroring-7').addClass( "wrapper-mirroring-7-changed" ); 
            $('.social-icon').addClass( "social-icon-changed" ); 
            $('#block-7 li.widget').addClass( "widget-changed" );

            $('#block-1').addClass( "block-1-changed" );

            $('#block-9').addClass( "block-9-changed" );

            $('#wrapper-6').addClass( "wrapper-6-changed" );
            $('.wrapper-mirroring-6').addClass( "wrapper-mirroring-6-changed" );

          } else {
            $('#wrapper-7').removeClass( "wrapper-7-changed" );
            $('.wrapper-mirroring-7').removeClass( "wrapper-mirroring-7-changed" ); 
            $('.social-icon').removeClass( "social-icon-changed" );
            $('#block-7 li.widget').removeClass( "widget-changed" );
            $('#block-1').removeClass( "block-1-changed" );
            $('#block-9').removeClass( "block-9-changed" );
            $('#wrapper-6').removeClass( "wrapper-6-changed" );
            $('.wrapper-mirroring-6').removeClass( "wrapper-mirroring-6-changed" );
          }   

       });



    }

  });

}); 
</script>

比混入的 CSS 可能太多无法发布,但只是在 CSS3 中使用了过渡效果,所以当它添加类时它会“移动”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    相关资源
    最近更新 更多