【问题标题】:Show last fadeIn div on first position在第一个位置显示最后一个 fadeIn div
【发布时间】:2018-06-26 07:33:47
【问题描述】:

我有 10 个随机显示的 div。

如何每次都将最后显示的 div 设置在顶部(排名第一的位置),而不是按 div 的 html 顺序?

这是我的代码:

var myVar;    
function showDiv(){
  var random = Math.floor(Math.random() * $('.notification').length);
  $('.notification').eq(random).fadeIn(200).delay(3000).fadeOut(200);
  createRandomInterval();
}

function createRandomInterval(){
  setTimeout(showDiv, 500+ Math.random() * 4000);
}
$(document).ready(function(){
    createRandomInterval();
});
.notification {
  width: 200px;
  height: 50px;
  background-color: yellow;
  border: 1px solid rgba(0,0,0,0.2);
  margin-bottom: 5px;
  text-align: center;
  padding-top: 20px;
  display: none;/* hide initially so that fadIn() fadeOut() will work
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="notification">1</div>
<div class="notification">2</div>
<div class="notification">3</div>
<div class="notification">4</div>
<div class="notification">5</div>
<div class="notification">6</div>
<div class="notification">7</div>
<div class="notification">8</div>
<div class="notification">9</div>
<div class="notification">10</div>

这是我的小提琴:https://jsfiddle.net/gkq21ppt/3/

编辑:解决方案的想法

一种解决方案可能是包装 div 并将它们设置为 column-reverse。然后添加一个 JS 代码,它将一个序列号设置为弹性订单号到每个新的淡入淡出的 div 中。 但我不知道如何做到这一点,我的 JS 技能很低。

所以循环可能看起来像:

  1. 创建从 1 开始的数字作为变量
  2. 创建类宽度名称,例如“订单-[编号]”
  3. 在“.order-[number]”类中将css属性“order”设置为[number]
  4. 在该类淡入之前将其添加到循环中
  5. 在这个类淡出后移除它

还是?

【问题讨论】:

    标签: javascript jquery css flexbox


    【解决方案1】:

    您可以尝试使用.prependTo()

    这将做什么(我认为)是删除活动通知并将其添加回容器的第一个位置。由于这种行为,不需要使用 flexbox。

    注意这会改变 HTML 结构。

    updated fiddle

    var myVar;
    
    function showDiv() {
      var random = Math.floor(Math.random() * $('.notification').length);
      $('.notification').eq(random).prependTo('.container').fadeIn(200).delay(3000).fadeOut(200);
      createRandomInterval();
    }
    
    function createRandomInterval() {
      setTimeout(showDiv, 500 + Math.random() * 4000);
    }
    $(document).ready(function() {
      createRandomInterval();
    });
    .notification {
      width: 200px;
      height: 50px;
      background-color: yellow;
      border: 1px solid rgba(0, 0, 0, 0.2);
      margin-bottom: 5px;
      text-align: center;
      padding-top: 20px;
      display: none;
      /* hide initially so that fadIn() fadeOut() will work */
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="container">
      <div class="notification">1</div>
      <div class="notification">2</div>
      <div class="notification">3</div>
      <div class="notification">4</div>
      <div class="notification">5</div>
      <div class="notification">6</div>
      <div class="notification">7</div>
      <div class="notification">8</div>
      <div class="notification">9</div>
      <div class="notification">10</div>
    </div>

    【讨论】:

    • 一见钟情。但是如果显示 div-6 并且 div-5 淡入,它将不会放在顶部,而是放在 div-6 下(这对于 column-reverse 属性是合乎逻辑的)。所以它是一样的,只是反过来。每个新淡入的 div 都应该放在顶部,与 html 中的 div 位置无关。
    • 我又想了想。如果您将其设置为 column-reverse 并将序列号作为 flex order 属性添加到每个淡入淡出的 div,则解决方案可能是。还是?
    • @RefereeAndy 我已经更新了我的答案。希望对你有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多