【问题标题】:Making navigation hover underline respond on browser resize使导航悬停下划线响应浏览器调整大小
【发布时间】:2023-03-17 17:02:01
【问题描述】:

我目前有以下工作导航,其中下划线在链接悬停时显示动画。但是我注意到,当我调整浏览器的大小时,下划线不会重置到正确的位置。我假设如果我从鼠标离开函数中重用一些 JS 并在窗口调整大小函数中使用它,它会正常工作,但我一直收到错误消息。有什么想法吗?

https://codepen.io/anon/pen/MRQaMm

JS:

$(".underline-nav").css("width", $("#one").width());
   $(".underline-nav").css("margin-left", $("#one").css("margin-left"));
   var unav = $(".underline-nav");
   $('nav a').mouseover(function(){
     $(".underline-nav").css("transition", "all ease 0.43s" );
       var position = $(this).position();
       unav.css({
         "width": $(this).width(),
         "margin-left": $(this).css("margin-left"),
         "left": position.left
       });
   })
   $('nav').mouseleave(function() {
               $(".underline-nav").css("transition", "all ease 0.7s" );
     var firstChild = $(this).find('a:first-child');
     var position = firstChild.position();
       unav.css({

         "width": firstChild.width(),
         "margin-left": firstChild.css("margin-left"),
         "left": position.left
       });
   })

//NEW BUT CAUSES ERROR
     var resizeTimer;
     $(window).resize(function() {
         clearTimeout(resizeTimer);
        $(".underline-nav").css("transition", "all ease 0.7s" );
        var firstChild = $(this).find('a:first-child');
        var position = firstChild.position();
            unav.css({

                "width": firstChild.width(),
                "margin-left": firstChild.css("margin-left"),
                "left": position.left
            });
     })

【问题讨论】:

    标签: javascript html css resize nav


    【解决方案1】:

    $(this) 的值是匿名resize 函数内部的undefined。如果您将$(this) 替换为$('nav'),则一切正常。

    简而言之,替换这个……

    $(window).resize(function() {
      …
      var firstChild = $(this).find("a:first-child");
    }
    

    ……有了这个

    $(window).resize(function() {
      …
      var firstChild = $("nav").find("a:first-child");
    }
    

    演示

    $(".underline-nav").css("width", $("#one").width());
    $(".underline-nav").css("margin-left", $("#one").css("margin-left"));
    var unav = $(".underline-nav");
    $("nav a").mouseover(function() {
      $(".underline-nav").css("transition", "all ease 0.43s");
      var position = $(this).position();
      unav.css({
        width: $(this).width(),
        "margin-left": $(this).css("margin-left"),
        left: position.left
      });
    });
    $("nav").mouseleave(function() {
      $(".underline-nav").css("transition", "all ease 0.7s");
      var firstChild = $(this).find("a:first-child");
      var position = firstChild.position();
      unav.css({
        width: firstChild.width(),
        "margin-left": firstChild.css("margin-left"),
        left: position.left
      });
    });
    
    //NEW BUT CAUSES ERROR
    var resizeTimer;
    $(window).resize(function() {
      clearTimeout(resizeTimer);
    
      $(".underline-nav").css("transition", "all ease 0.7s");
      var firstChild = $("nav").find("a:first-child");
      var position = firstChild.position();
      console.log("position", position);
      unav.css({
        width: firstChild.width(),
        "margin-left": firstChild.css("margin-left"),
        left: position.left
      });
    });
    html {
      background-color: blue;
    }
    
    body {
      margin: 0;
    }
    
    .underline-nav {
      background: tomato;
      height: .25rem;
      position: absolute;
      top: 6vh;
      margin-top: 1vw;
      transform: translatex(4vw);
      transition: all ease 0.37s;
      z-index: 0;
    }
    
    .mainnav {
      padding-top: 1vh;
      width: 100%;
      position: absolute;
      z-index: 4;
      font-size: 0.8vw;
      text-align: center;
      display: flex;
      justify-content: center;
      align-items: center;
    }
    
    nav img {
      padding-left: 4vw;
      height: 3.5vw;
    }
    
    a {
      color: #fff;
      text-decoration: none;
      font-weight: 700;
      padding-left: 4vw;
      letter-spacing: 0.4em;
    }
    
    .sectionone {
      height: 100vh;
      background: url('media/bg.jpg') no-repeat center center fixed;
      background-size: cover;
      color: #fff;
      font-family: 'Raleway';
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <nav>
      <div class="mainnav">
        <a id="one" href="#">HOME</a>
        <a href="#">LINK 1</a>
        <a href="#">LINK 2</a>
        <img src="/media/Asset 1.png" alt="logo">
        <a href="#">LINK 3</a>
        <a href="#">LINK 4</a>
        <a href="#">LINK 5</a>
        <div class="underline-nav">
        </div>
      </div>
    </nav>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-15
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多