jquery - css3 宽度过渡不适用于图像

标签 jquery css

向下滚动时,我使用 jQuery 在我的标题中添加了一个类以设置不同的样式。每种风格我都有两种不同颜色的两个标志。原始的比滚动时加载的大。我给了他们一个 diff 宽度并针对该类,但过渡有效的唯一一个是原始的或#logo1。

$(window).scroll(function() {
  if ($(document).scrollTop() > 150) {
    $('#main-page').addClass('appear');
    $('#logo1').fadeOut(0);
    $('#logo2').show(0);
  } else  {
    $('#logo2').hide(0);
    $('#logo1').fadeIn(0);
    $('#main-page').removeClass('appear');
  }
});
#main-page{
  background:transparent;
  position:absolute;
  width:100%;
  top:0;
  transition: background 600ms ease-in-out;
}
	
#main-page .site-nav{
  right:2em;
}
	
#main-page .site-nav a{
  color:white;
}
	
#main-page a.login-nav{
  background:#2ad4dc;
  padding: 1em !important;
  font-size:0.8em;
  color:black;
}
	
#main-page a.login-nav:hover{
  background:#FFF !important;
  color:black !important;
}

#main-page a.vert:before,a.vert:after{
  background:#fff;
}

#main-page .liner:before,.liner:after{
  background:#fff;
}
	
#main-page .got{
  width:220px;
  transition:width 600ms ease-in;
}

.appear .got{
  width:200px !important;
  transition:width 600ms ease-in;
}

.appear{
  position:fixed !important;
  background:white !important;
  top:0;
  width:100%;
  z-index:6;
  box-shadow: 2px 1px 10px #333;
}

#logo2 {
  display:none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<header id="main-page">
  <div class="container">
    <div class="logo-container">
      <a id="logo1" href="/">
        <img class="got" src="img/img1.png" alt="test" />
      </a>
      <a id="logo2" href="/">
        <img class="got" src="img/img2.png" alt="test" />
      </a>
    </div>

    <nav class="site-nav">
      <ul class="navi">
        <li>
          <span class="liner">
            <a class="vert" href="/">Home</a>
          </span>
        </li>
        <li>
          <span class="liner">
            <a class="vert" href="https://medium.com/">Blog</a>
          </span>
        </li>
        <li class="log">
          <a class="login-nav" href="/meta">
            <i class="fa fa-sign-in" aria-hidden="true"></i>Try Now
          </a>
        </li>
      </ul>
    </nav>

    <div class="menu-toggle">
      <div class="hamburger"></div>
    </div>
  </div>
</header>

最佳答案

问题似乎是您使用隐藏/显示方法(设置显示属性)和 #logo2{ display:none } 隐藏/显示 #logo2/.

另一种方法可能是只有一个 img 元素并使用新图像的 URL 更改 src 属性。用第二张图片的 URL 放置一个隐藏的 img 元素可能是个好主意,所以它会在您显示之前预取。

查看下面的代码片段以获得完整的解决方案。

$(window).scroll(function() {
  if ($(document).scrollTop() > 150) {
    $("#logo img").attr("src", "http://via.placeholder.com/350x150");
    $("#logo").addClass("appear");
  } else {
    $("#logo img").attr("src", "http://via.placeholder.com/250x150");
    $("#logo").removeClass("appear");
  }

});
body {
  height: 600px;
}

#main-page {
  margin-top: 100px;
  background: transparent;
  position: absolute;
  width: 100%;
  top: 0;
  transition: background 600ms ease-in-out;
}

#main-page .site-nav {
  right: 2em;
}

#main-page .site-nav a {
  color: white;
}

#main-page a.login-nav {
  background: #2ad4dc;
  padding: 1em !important;
  font-size: 0.8em;
  color: black;
}

#main-page a.login-nav:hover {
  background: #FFF !important;
  color: black !important;
}

#main-page a.vert:before,
a.vert:after {
  background: #fff;
}

#main-page .liner:before,
.liner:after {
  background: #fff;
}

#main-page .got {
  width: 220px;
  transition: width 600ms ease-in;
  background-color: blue;
}

.appear .got {
  width: 200px !important;
}

.appear {
  position: fixed !important;
  background: white !important;
  top: 0;
  width: 100%;
  z-index: 6;
  box-shadow: 2px 1px 10px #333;
}

.hidden {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<header id="main-page">
  <div class="container">
    <div class="logo-container">
      <a id="logo" href="/"><img class="got" src="http://via.placeholder.com/250x150" alt="test"><img class="hidden" src="http://via.placeholder.com/350x150" alt="test"></a>
    </div>

    <nav class="site-nav">
      <ul class="navi">
        <li><span class="liner"><a class="vert" href="/">Home</a></span></li>
        <li><span class="liner"><a class="vert" href="https://medium.com/">Blog</a></span></li>
        <li class="log"><a class="login-nav" href="/meta"><i class="fa fa-sign-in" aria-hidden="true"></i>Try Now</a></li>
      </ul>
    </nav>

    <div class="menu-toggle">
      <div class="hamburger"></div>
    </div>

  </div>
</header>

关于jquery - css3 宽度过渡不适用于图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46499100/

相关文章:

jquery - 如何用jQuery打开后隐藏相同的内容?

javascript - 如何使用 Api 将正在播放的 last.fm 添加到我的网站中

html - 如何制作粘性导航栏?

css - 我应该在我的 CSS 定义中为每个元素/类写下完整的层次结构路径吗?

html - 如何测量特定字体大小的特定字体的文本大小

javascript - 如何在 JavaScript 中通过 get 与 & 传递字符串

javascript - 如何避免每次运行函数时设置单击绑定(bind)事件

css - 什么可能导致 Firefox 中出现此 CSS 边距共享(?)错误?

html/css 框模型结构,居中和东西

具有多个实例的javascript对象文字模式