在引导程序中的导航栏上方自动隐藏警报

Posted

技术标签:

【中文标题】在引导程序中的导航栏上方自动隐藏警报【英文标题】:Auto hide alert above navbar in bootstrap 【发布时间】:2019-01-31 18:58:03 【问题描述】:

大家好,我正试图向您展示隐藏并钉在导航栏上方,我得到了它的显示,但是他的动画在隐藏时不起作用..有人可以帮我修复它吗?

查看fiddle

// CSS

.margin-top-0  margin-top: 0px !important; 
.margin-top-20  margin-top: 20px !important; 
.margin-top-40  margin-top: 40px !important; 
.alert-server 
  border-radius: 0;
  position:fixed;
  top:0;
  width:100%;
  padding:10px 0;
  text-align:center;
  display:none;

// 显示#notificationBar

setTimeout(function () 

    // working
    $("#notificationBar").css("display":"block");
    $('#notificationBar').html('Hello User! Welcome!').addClass('margin-top-0', 2000);
    $('body, .navbar').addClass('margin-top-40', 2000);

, 2000);

// 隐藏#notificationBar

setTimeout(function () 

        // not working
        $('#notificationBar').removeClass('margin-top-0', 2000).html().css("display":"none");
        $('body, .navbar').removeClass('margin-top-40', 2000);

    , 6000);

// HTML

<body>              
    <div id="notificationBar" class="alert alert-success alert-server" role="alert" style="display: none; overflow: hidden; z-index: 9999; margin-top: -40px;">
      <button type="button" class="close" data-dismiss="alert">×</button>
    </div>      

    <div class="navbar-spacer" style="min-height:60px;"></div>                  

     <!-- Fixed navbar -->
     <nav class="website-nav navbar navbar-default navbar-fixed-top">                    
        <div class="navbar-inner">
            <div class="nav-center">
            </div>
        </div>
     </nav>

【问题讨论】:

能否请您添加一个 JS Fiddle 链接。 请检查您的浏览器控制台是否有错误并将其复制到此处以便我们解决? @AhmedHammad 我在控制台中没有错误。它正在隐藏,但隐藏时的动画不起作用...我想看到它向上滑动。 @Anji 我会贴在那里 如何将其添加到边距类中:“过渡:所有 2s 线性”。 【参考方案1】:

这是一个基本的解决方案。

原版非固定.navbar版本http://jsfiddle.net/joshmoto/vr4xto0a/1/

对于固定的导航栏,我不得不采取稍微不同的方法,通过在 body 上添加类来显示警报,并为导航栏位置设置动画并增加 body padding。

查看新的.navbar.fixed-top 版本http://jsfiddle.net/joshmoto/1a620ho8/

showAlert = function() 
  $('body').addClass('alert-show');


hideAlert = function() 
  $('body').removeClass('alert-show');


// auto show
setTimeout(function() 
  showAlert();
, 1000);

// auto hide
setTimeout(function() 
  hideAlert();
, 5000);
@import "http://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css";

BODY 
  min-height: 75rem;
  padding-top: 4.5rem;
  transition: padding .5s ease-in-out;


.navbar.fixed-top 
  transition: top .5s ease-in-out;


.alert 
  position: fixed;
  width: 100%;
  top: -50px;
  transition: top .5s ease-in-out;


BODY.alert-show 
  padding-top: calc(4.5rem + 50px);


BODY.alert-show .alert 
  top: 0;


BODY.alert-show .navbar.fixed-top 
  top: 50px;
<div class="alert alert-success mb-0 text-center" role="alert">
  I'm going to disapear in 5000ms
</div>

<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
  <a class="navbar-brand" href="#">Fixed navbar</a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>
  <div class="collapse navbar-collapse" id="navbarCollapse">
    <ul class="navbar-nav mr-auto">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Link</a>
      </li>
      <li class="nav-item">
        <a class="nav-link disabled" href="#">Disabled</a>
      </li>
    </ul>
    <form class="form-inline mt-2 mt-md-0">
      <input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
      <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
    </form>
  </div>
</nav>

<main role="main" class="container">
  <div class="jumbotron">
    <h1>Navbar example</h1>
    <p class="lead">This example is a quick exercise to illustrate how fixed to top navbar works. As you scroll, it will remain fixed to the top of your browser's viewport.</p>
    <a class="btn btn-lg btn-primary" href="../../components/navbar/" role="button">View navbar docs &raquo;</a>
  </div>
</main>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="http://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>

【讨论】:

差不多了,我想使用 jquery-ui 的持续时间动画来平滑显示和隐藏我的警报。看看我的例子:jsfiddle.net/vinoli/qdk0pytx/28 我已经更新了问题,以便使用 css 获得平滑的显示隐藏过渡,而不是在 jquery-ui 中加载。 太棒了,太干净了!!非常感谢! 不用担心,请确保您的页面加载时已经在 alert 元素上使用了 .alert-hide 类。例如,如果您的警报在移动设备中超过 50 像素的高度,您可能需要通过一些媒体查询来修改 CSS。 我尝试在我的代码中使用它,但还有一个问题。我正在使用固定的导航栏并且不起作用。您可以更改您的代码吗?

以上是关于在引导程序中的导航栏上方自动隐藏警报的主要内容,如果未能解决你的问题,请参考以下文章

单击导航抽屉引导程序时未显示侧导航栏

在引导程序中的导航栏内对齐内容

使导航栏可堆叠(引导程序)

移动视图中的徽标超大导航栏 |引导程序

如何使用引导程序更改导航栏中的过渡动画?

菜单上方的引导导航栏品牌,直到调整大小并折叠