2017-06-20 92 views
1

我有一个网站,我在滚动上使用两个不同的标志,但我只使用一个,如果屏幕小于1024px。JS打破窗口调整大小

一切都按预期工作,除了在此屏幕上调整大小的屏幕。它不显示任何在头部的标志,但如果我刷新页面,它的工作原理...

这是我的代码:

HTML

<div class="container clearfix" > 
     <h2 id="logo"><a rel="home" href="#">LOGO ONE</a></h2> 
     <h2 id="logo2"><a rel="home" href="#"><span>LOGO</span> <br/>TWO</a></h2> 
</div> 

JS

$(document).ready(function() { 
    //Main menu animation 
    $(function() { 
    if($(window).width() >= 1023){ 
     var targetOffset = $("#section--4").offset().top; 
     var $w = $(window).scroll(function() { 
     if ($w.scrollTop() + 200 > targetOffset) { 
      $("#logo").fadeIn(1000); 
      $("#logo2").fadeOut('slow'); 
      $("header").css({"overflow": "hidden"}); 
     } else { 
      $("#logo2").fadeIn(2000) 
      $("#logo").fadeOut('slow'); 
      $("header").css({"overflow": "visible"}); 
     } 
    }); 
    } 
}); 
+0

您可能需要为您的 – Laazo

回答

0

您目前拥有的JS代码,当页面才会被触发加载,因为你正在使用

$(document).ready(function() { 
    //Main menu animation 
}); 

jQuery有.resize()前夕nt处理程序,它会在浏览器窗口调整大小时触发,所以我建议使用下面的代码,如果你真的想坚持一个JS解决方案。虽然我发现媒体的质疑在这个特定的情况好了很多,使用/平滑:

$(window).resize(function() { 
    //Main menu animation 
    $(function() { 
    if($(window).width() >= 1023){ 
     var targetOffset = $("#section--4").offset().top; 
     var $w = $(window).scroll(function() { 
     if ($w.scrollTop() + 200 > targetOffset) { 
     $("#logo").fadeIn(1000); 
     $("#logo2").fadeOut('slow'); 
     $("header").css({"overflow": "hidden"}); 
     } else { 
     $("#logo2").fadeIn(2000) 
     $("#logo").fadeOut('slow'); 
     $("header").css({"overflow": "visible"}); 
     } 
    }); 
    } 
}); 

希望它可以帮助你

+0

这打破了网站......任何想法为什么? – patie

+0

我无法完全调试代码,因为您在代码'$(“#section - 4”)中使用的选择器将不会被找到,因为它不在您的HTML代码中。 –

2

只需使用@media screen and (min-width: 1024) { logo { display: none; }}隐藏您的标志。根据不同,您不需要JS来处理可见。你也可以这样做object.addEventListener("resize", myScript);

+0

页面的最小宽度和高度如何,你要我用object.addEventListener(“调整”,myScript的); ? – patie

+0

这里是示例https://codepen.io/CrUsH20/pen/PjmqKG – Sergey

0

这是因为处理窗口宽度的代码在滚动之前被调用,这意味着当窗口调整大小时,徽标将保持不变,直到我在浏览器中刷新的页面和代码被重新加载。要解决此问题,请使用jQuery的$(element).resize()处理程序来解决此问题。另一种解决方案是使用CCS媒体查询与1,024像素

文档的最大宽度链接

https://api.jquery.com/resize/

https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries

1

您需要开枪的窗口大小调整事件,并运行你的代码,你

function myfunction() { 
 
    if ($(window).width() >= 1023) { 
 
    var targetOffset = $("#section--4").offset().top; 
 
    var $w = $(window).scroll(function() { 
 
     if ($w.scrollTop() + 200 > targetOffset) { 
 
     $("#logo").fadeIn(1000); 
 
     $("#logo2").fadeOut('slow'); 
 
     $("header").css({ 
 
      "overflow": "hidden" 
 
     }); 
 
     } else { 
 
     $("#logo2").fadeIn(2000) 
 
     $("#logo").fadeOut('slow'); 
 
     $("header").css({ 
 
      "overflow": "visible" 
 
     }); 
 
     } 
 
    }); 
 
    } 
 
}; 
 

 
$(document).ready(function() { 
 
    myfunction(); 
 
}); 
 
$(window).on('resize', function() { 
 
    myfunction(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="container clearfix"> 
 
    <h2 id="logo"><a rel="home" href="#">LOGO ONE</a></h2> 
 
    <h2 id="logo2"><a rel="home" href="#"><span>LOGO</span> <br/>TWO</a></h2> 
 
</div>
01:也就是在页面加载

$(window).on('resize', function() { 
    // call your function here 
}); 

见代码段运行代码

+0

我修改$(document).ready(function()与您的代码,但它打破了网站... – patie

+0

@patie我做了一个片段,看看它是否与你做的一样 – Chiller

0

我不能强调不够多少,你应该与媒体查询,谢尔盖提出来这样做。

它可以完成与JS和事件处理程序,但CSS @media查询将成为你的朋友在这里。

+0

我已经尝试过媒体查询,它didn 't工作,这就是为什么我必须使用jQuery ... – patie

+0

如果它不是与媒体查询一起工作,那么错误 '@media唯一屏幕和(最大设备宽度:1024px) – DMcCallum83