2016-10-02 25 views
0

嗨,试图在粘菜单来实现平稳过渡

我有用户开始向下滚动和徽标上升了屏幕变成尽快固定在顶部的标志。标志也变小了。

这是我的代码:

//<![CDATA[ 
 
    $(function(){ 
 
      // Check the initial Poistion of the Sticky Header 
 
      var stickyHeaderTop = $('#logo').offset().top + 160; 
 
     
 
      $(window).scroll(function(){ 
 
        if($(window).scrollTop() > stickyHeaderTop) { 
 
          $('#logo').addClass('fixed'); 
 
        } else { 
 
          $('#logo').removeClass('fixed'); 
 
        } 
 
      }); 
 
     });//]]>
#logo { 
 
     height: 145px; 
 
     margin: 10px 0 0; 
 
     transition:all 1s ease 0s; 
 
     top: -160px; 
 
     color:black; 
 
     background-color:yellow; 
 
    } 
 
    .fixed { 
 
     height: 55px !important; 
 
     position: fixed; 
 
     top: 0!important; 
 
     z-index: 3; 
 
    } 
 

 
    body {min-height:1000px;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="logo">SOME LOGO HERE</div>

样样精,你向下滚动,因为动画流畅。但是,当您向后滚动时,过渡是不连续的,因为元素会消失并重新出现,而不是逐渐回到原来的位置。

我该如何解决这个问题?

谢谢。

回答

0

你需要修复固定class.update的宽度,并添加以下内容.fixed

//<![CDATA[ 
 
    $(function(){ 
 
      // Check the initial Poistion of the Sticky Header 
 
      var stickyHeaderTop = $('#logo').offset().top + 160; 
 
     
 
      $(window).scroll(function(){ 
 
        if($(window).scrollTop() > stickyHeaderTop) { 
 
          $('#logo').addClass('fixed'); 
 
        } else { 
 
          $('#logo').removeClass('fixed'); 
 
        } 
 
      }); 
 
     });//]]>
#logo { 
 
     height: 145px; 
 
     margin: 10px 0 0; 
 
     transition:all 1s ease 0s; 
 
     top: -160px; 
 
     color:black; 
 
     background-color:yellow; 
 
    } 
 
    .fixed { 
 
     height: 55px !important; 
 
     width: 100%; 
 
     width: -moz-available;   /* WebKit-based browsers will ignore this. */ 
 
     width: -webkit-fill-available; 
 
     position: fixed; 
 
     top: 0!important; 
 
     z-index: 3; 
 
    } 
 

 
    body {min-height:1000px;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="logo">SOME LOGO HERE</div>

+0

很抱歉,但,这并不能改变什么。当您向后滚动时,徽标仍然消失并刚刚重新出现。 –

+0

你想要平滑过渡吗? –

+0

是的,我需要一个平滑过渡,以便当您向后滚动时徽标回到原来的位置。 –

0
  1. 不要使用id选择(#)是CSS。它倾向于创建您已经遇到的特定性问题,并迫使您在.fixed选择器中使用!important(您应该使用几乎从不使用)。详细了解它herehere。是的,有一些有效的例外情况,但只有在确切知道您在那里做了什么以及为什么这样做后,您才需要应用这些例外。

  2. 您不能动画position属性,因此您需要找到一个解决方案,其中position: fixed;不会更改。切换到固定位置可能会导致不平滑的行为。

  3. 使用此更正的代码段的代码工作的方式来解决方案。

$(document).ready(function() { 
 
    // Check the initial Poistion of the Sticky Header 
 
    var stickyHeaderTop = $('#logo').offset().top + 160; 
 

 
    $(window).scroll(function() { 
 
    if ($(window).scrollTop() > stickyHeaderTop) { 
 
     $('#logo').addClass('fixed'); 
 
    } else { 
 
     $('#logo').removeClass('fixed'); 
 
    } 
 
    }); 
 
});
.logo { 
 
    height: 145px; 
 
    margin: 10px 0 0; 
 
    position: fixed; 
 
    transition: all 1s ease 0s; 
 
    top: -160px; 
 
    color: black; 
 
    background-color: yellow; 
 
} 
 
.logo.fixed { 
 
    height: 55px; 
 
    top: 0; 
 
    z-index: 3; 
 
} 
 
body { 
 
    min-height: 1000px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="logo" class="logo">SOME LOGO HERE</div>

+0

一个观察,标志必须从一开始就显得更大。然后当用户向下滚动时,它会下降并变小。 –

+0

我不会为你解决它,我只是解释你的代码和方法有哪些问题。你现在必须自己解决。 – connexo

+0

对不起,但你的答案不是答案,因为根本没有任何帮助。 –