javascript - 滚动后悬停功能

标签 javascript jquery html css twitter-bootstrap

我有一个在滚动时缩小的导航栏,navbar-nav 中的 li 有一个图像,当导航栏在滚动时缩小时图像保留但文本显示变为无。

我有一个函数可以在它消失后在悬停时显示这个文本,但我有一个问题,我只希望这个函数只在导航栏缩小后工作,当导航栏变为正常大小时我不想要这个功能正常工作,另一件事我希望该功能分别显示每个 li 的文本,因为当我将鼠标悬停时,它会显示所有带有文本的跨度,我只想要 li 的 child ,我尝试了 .children () 方法无效,求助!这是我的代码:

    $(window).scroll(function() {
      if ($(document).scrollTop() > 50) {
        $('nav').addClass('shrink');
      } else {
        $('nav').removeClass('shrink');
      }
    });

$('.home').hover(function() {
	 $(this).css('margin-right', '5px');
   $('.navbar-nav li a span').css('display', 'block');
	 $('.navbar-nav li a').css('height', '155px');
	 $('.navbar-nav li a img').css('margin-right', '5px');
});
 body {
      padding-top: 50px;
      min-height:800px
    }

    nav a {
      padding-top: 20px !important;
      padding-bottom: 20px !important;
      font-size: 18px;
    }

    nav .navbar-toggle {
      margin: 13px 15px 13px 0;
      -moz-transition: all 0.3s;
      -webkit-transition: all 0.3s;
      transition: all 0.3s;	
    }

    .navbar-brand {
      font-size: 30px;
          -moz-transition: all 0.3s;
      -webkit-transition: all 0.3s;
      transition: all 0.3s;
    }

    nav.navbar.shrink {
      min-height: 35px;
        -moz-transition: all 0.3s;
      -webkit-transition: all 0.3s;
      transition: all 0.3s;	
    }

    nav.shrink a {
      padding-top: 10px !important;
      padding-bottom: 10px !important;
      font-size: 15px;
    }

    nav.shrink .navbar-brand {
      font-size: 25px;
    }

    nav.shrink .navbar-toggle {
      padding: 4px 5px;
      margin: 8px 15px 8px 0;
    }

    nav.shrink .navbar-nav li a span{
display: none
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">Brand</a>
        </div>
        <div class="collapse navbar-collapse">
          <ul class="nav navbar-nav pull-right">
            <li class="active home"><a href="#"><img src="https://cdn0.iconfinder.com/data/icons/iconshock_guys/512/andrew.png" height="50" width="50"><span>Home</span></a></li>
            <li class="active service"><a href="#"><img src="https://cdn0.iconfinder.com/data/icons/iconshock_guys/512/andrew.png" height="50" width="50"><span>Services</span></a></li>
            <li class="active about"><a href="#"><img src="https://cdn0.iconfinder.com/data/icons/iconshock_guys/512/andrew.png" height="50" width="50"><span>About us</span></a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>

    <div class="container">
      <div class="text-center">
        <h1>Bootstrap starter template</h1>
        <p class="lead">Use this document as a way to quickly start any new project.<br> All you get is this text and a mostly barebones HTML document.</p>
      </div>
      <div class="text-center">
        <p class="lead">Use this document as a way to quickly start any new project.<br> All you get is this text and a mostly barebones HTML document.</p>
      </div>
      
    </div>

最佳答案

要实现你想要的行为,你不需要滥用javascript,当然可以用JS来完成,但更简单直接就是使用CSS

只需将此规则添加到您的代码中:

nav.shrink .navbar-nav li:hover a span{
  display: block
}

这当然只是示例,但我相信使用 CSS 方法您将更轻松、更快地实现您的目标,并且不会产生额外的性能开销=)

这是一个工作片段:

    $(window).scroll(function() {
      if ($(document).scrollTop() > 50) {
        $('nav').addClass('shrink');
      } else {
        $('nav').removeClass('shrink');
      }
    });
 body {
      padding-top: 50px;
      min-height:800px
    }

    nav a {
      padding-top: 20px !important;
      padding-bottom: 20px !important;
      font-size: 18px;
    }

    nav .navbar-toggle {
      margin: 13px 15px 13px 0;
      -moz-transition: all 0.3s;
      -webkit-transition: all 0.3s;
      transition: all 0.3s;	
    }

    .navbar-brand {
      font-size: 30px;
          -moz-transition: all 0.3s;
      -webkit-transition: all 0.3s;
      transition: all 0.3s;
    }

    nav.navbar.shrink {
      min-height: 35px;
        -moz-transition: all 0.3s;
      -webkit-transition: all 0.3s;
      transition: all 0.3s;	
    }

    nav.shrink a {
      padding-top: 10px !important;
      padding-bottom: 10px !important;
      font-size: 15px;
    }

    nav.shrink .navbar-brand {
      font-size: 25px;
    }

    nav.shrink .navbar-toggle {
      padding: 4px 5px;
      margin: 8px 15px 8px 0;
    }

    nav.shrink .navbar-nav li a span{
display: none
}
nav.shrink .navbar-nav li:hover a span{
display: block
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">Brand</a>
        </div>
        <div class="collapse navbar-collapse">
          <ul class="nav navbar-nav pull-right">
            <li class="active home"><a href="#"><img src="https://cdn0.iconfinder.com/data/icons/iconshock_guys/512/andrew.png" height="50" width="50"><span>Home</span></a></li>
            <li class="active service"><a href="#"><img src="https://cdn0.iconfinder.com/data/icons/iconshock_guys/512/andrew.png" height="50" width="50"><span>Services</span></a></li>
            <li class="active about"><a href="#"><img src="https://cdn0.iconfinder.com/data/icons/iconshock_guys/512/andrew.png" height="50" width="50"><span>About us</span></a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>

    <div class="container">
      <div class="text-center">
        <h1>Bootstrap starter template</h1>
        <p class="lead">Use this document as a way to quickly start any new project.<br> All you get is this text and a mostly barebones HTML document.</p>
      </div>
      <div class="text-center">
        <p class="lead">Use this document as a way to quickly start any new project.<br> All you get is this text and a mostly barebones HTML document.</p>
      </div>
      
    </div>

关于javascript - 滚动后悬停功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47379951/

相关文章:

html - CSS动画悬停问题

javascript - 从下拉菜单中过滤网页内容的最简单方法是什么?

javascript - 在视网膜显示屏上使用 jquery mobile 的数据图标问题

jquery - 创建元素并设置属性

jquery - 硬编码幻灯片有效但在 WordPress 呈现时中断

javascript - 在多个固定高度的表格中自动滚动

javascript - 访问函数内部的对象

CSS 中 HTML 的 "<img align=top>"?

javascript - 保存/提交时使用多个选项的 Jquery 自动完成问题

javascript - 如何使用 POST 请求将动态获取的输入数据发送到服务器