【问题标题】:In need of a fade out animation for my modal window code我的模态窗口代码需要淡出动画
【发布时间】:2016-06-30 21:42:01
【问题描述】:

我刚开始编写脚本,我不知道在关闭模态窗口时如何添加淡出动画(与淡入动画相同)。

这里是项目的链接:https://jsfiddle.net/myosis/kb0o27vy/

我喜欢它的一切,它只需要一个结束动画。 有人可以帮我吗!?

:)

    <!DOCTYPE html>
<html>
<head>
<style>

/* The Modal (background) */
.modal {
    display: none; /* Hidden by default */
    position: fixed; /* Stay in place */
    z-index: 1; /* Sit on top */
    padding-top: 100px; /* Location of the box */
    left: 0;
    top: 0;
    width: 100%; /* Full width */
    height: 100%; /* Full height */
    overflow: auto; /* Enable scroll if needed */
    background-color: rgb(255, 255, 255); /* Fallback color */
    background-color: rgba(255, 255, 255.4); /* Black w/ opacity */
    -webkit-animation-name: fadeIn; /* Fade in the background */
    -webkit-animation-duration: 5.4s;
    animation-name: fadeIn;
    animation-duration: 5.4s;
}
/* Modal Content */
.modal-content {
    position: relative;
    background-color: #fefefe;
    margin: auto;
    padding: 0;
    border: 0px;
    width: 822px;
    box-shadow: 0 4px 8px 0 rgba(0,0,0,0.02),0 6px 20px 0 rgba(0,0,0,0.02);
} 
/* Add Animation */
@-webkit-keyframes animatetop {
    from {top:-300px; opacity:0}
    to {top:0; opacity:1}
}
@keyframes animatetop {
    from {top:-300px; opacity:0}
    to {top:0; opacity:1}
}

/* The Close Button */
.close {
    -webkit-animation-name: fadeOut; /* Fade in the background */
    -webkit-animation-duration: 5.4s;
    animation-name: fadeOut;
    animation-duration: 5.4s
}
.close:hover,
.close:focus {
    color: #000;
    text-decoration: none;
    cursor: pointer;
}
.modal-header {
  color: #5B5B5B;
  font-size: 30px;
  font-family: source-sans-pro, sans-serif;
  font-weight: 300;
  position: relative;
}
.modal-body {   
  width: 538px;
  color: #7A7A7A;
  font-size: 14px;
  font-family: source-sans-pro, sans-serif;
  font-weight: 400;
  position: relative;
  }
.modal-footer {
    padding: 2px 16px;
    background-color: #ffffff;
    color: blac;
}
/* Add Animation */
@-webkit-keyframes fadeIn {
    from {opacity: 0}
    to {opacity: 1}
}  
@-webkit-keyframes fadeOut {
    from {opacity: 1}
    to {opacity: 0}
}
</style>
</head>
<body>

<h2>Animated Modal with Header and Footer</h2>
<!-- Trigger/Open The Modal -->
<button id="myBtn">Open Modal</button>

<!-- The Modal -->
<div id="myModal" class="modal">

  <!-- Modal content -->
  <div class="modal-content">
    <div class="modal-header">
      <span class="close">×</span>
          <div class="clearfix grpelem" id="u1562-4"><!-- content -->
     <p>test</p>
    </div>
   </div>
   <div class="clearfix colelem" id="u1567-4"><!-- content -->
    <p>test</p>
   </div>
   <div class="colelem" id="u1568"><!-- simple frame --></div>
   <div class="clearfix colelem" id="u1566-4"><!-- content -->
    <p>test</p>
   </div>
   <div class="clip_frame colelem" id="u1556"><!-- image -->
    <img class="block" id="u1556_img" src="" alt="" width="823" height="1024"/>
   </div>
    <div class="modal-footer">
      <h3>-</h3>
    </div>
  </div>
</div>

<script>
// Get the modal
var modal = document.getElementById('myModal');

// Get the button that opens the modal
var btn = document.getElementById("myBtn");

// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];

// When the user clicks the button, open the modal
btn.onclick = function() {
    modal.style.display = "block";
}

// When the user clicks on <span> (x), close the modal
span.onclick = function() {
    modal.style.display = "none";
}

// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
    if (event.target == modal) {
        modal.style.display = "none";
    }
}
</script>

</body>
</html>

【问题讨论】:

    标签: javascript html css fadeout modal-window


    【解决方案1】:

    如果您不想使用 jQuery,这里有一个快速的解决方案。我添加了一个带有 CSS 持续时间的 setTimeout,在此超时之后,模式设置为 display: none;。在setTimeout之前我已经添加了一个动画类来淡出Modal。

    // Get the modal
    var modal = document.getElementById('myModal');
    
    // Get the overlay
    var overlay = document.getElementById('modalOverlay');
    
    // Get the button that opens the modal
    var btn = document.getElementById("myBtn");
    
    // Get the <span> element that closes the modal
    var span = document.getElementsByClassName("close")[0];
    
    // When the user clicks the button, open the modal
    btn.onclick = function() {
      modal.className = modal.className.replace(/ modalClose/g, '');
      overlay.className = overlay.className.replace(/ modalClose/g, '');
      
      modal.style.display = "block";
      overlay.style.display = "block";
    };
    
    overlay.onclick = function() {
      modal.className = modal.className + ' modalClose';
      overlay.className = overlay.className + ' modalClose';
      
      setTimeout(function() {
        modal.style.display = "none";
        overlay.style.display = "none";
      }, 300);
    };
    
    
    // When the user clicks on <span> (x), close the modal
    span.onclick = function() {
      modal.className = modal.className + ' modalClose';
      overlay.className = overlay.className + ' modalClose';
    
      setTimeout(function() {
        modal.style.display = "none";
        overlay.style.display = "none";
      }, 300);
    };
    
    // When the user clicks anywhere outside of the modal, close it
    window.onclick = function(event) {
      if (event.target == modal) {
        modal.style.display = "none";
      }
    };
    body, html {
      width: 100%;
    }
    .u1568 {
      z-index: 23;
      width: 200px;
      background-color: transparent;
      color: #5B5B5B;
      line-height: 36px;
      font-size: 30px;
      font-family: source-sans-pro, sans-serif;
      font-weight: 300;
      position: relative;
      margin-right: -10000px;
      left: 25px;
    }
    
    .u1567-4 {
      z-index: 31;
      width: 200px;
      background-color: transparent;
      color: #9E9E9E;
      font-size: 14px;
      font-family: source-sans-pro, sans-serif;
      font-weight: 400;
      font-style: italic;
      margin-left: 49px;
      margin-top: 9px;
      position: relative;
    }
    
    #u1568 {
      z-index: 35;
      width: 538px;
      height: 1px;
      border-width: 0px;
      border-color: transparent;
      background-color: #E2E2E2;
      margin-left: 49px;
      margin-top: 4px;
      position: relative;
    }
    
    
    /* The Modal (background) */
    #modalOverlay {
      position: fixed;
      background-color: rgba(0,0,0,0.1);
      width: 100%;
      height: 100%;
      left: 0;
      top: 0;
      right: 0;
      display: none;
      z-index: 99;
    }
    .modal {
      display: none;
      opacity: 0;
      /* Hidden by default */
      position: fixed;
      /* Stay in place */
      z-index: 100;
      /* Sit on top */
      padding-top: 100px;
      /* Location of the box */
      left: 50%;
      top: 50%;
      width: 300px;
      height: 300px;
      overflow: auto;
      margin-left: -150px;
      margin-top: -150px;
      /* Full height */
      overflow: auto;
      /* Enable scroll if needed */
      background-color: rgb(255, 255, 255);
      /* Fallback color */
      background-color: rgba(255, 255, 255.4);
      /* Black w/ opacity */
      -webkit-animation-name: fadeIn;
      /* Fade in the background */
      -webkit-animation-duration: .3s;
      -webkit-animation-fill-mode: forwards;
      animation-name: fadeIn;
      animation-duration: .3s;
      animation-fill-mode: forwards;
    }
    
    
    /* Modal Content */
    
    .modal-content {
      position: relative;
      background-color: #fefefe;
      margin: auto;
      padding: 0;
      border: 0px;
      width: 822px;
      box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.02), 0 6px 20px 0 rgba(0, 0, 0, 0.02);
    }
    
    
    }
    
    /* Add Animation */
    @-webkit-keyframes animatetop {
      from {
        top: -300px;
        opacity: 0
      }
      
      to {
        top: 0;
        opacity: 1
      }
    }
    @keyframes animatetop {
      from {
        top: -300px;
        opacity: 0
      }
      
      to {
        top: 0;
        opacity: 1
      }
    }
    
    .modalClose {
      -webkit-animation-name: fadeOut;
      /* Fade in the background */
      
      -webkit-animation-duration: .3s;
      animation-name: fadeOut;
      animation-duration: .3s;
        animation-fill-mode: forwards;
        -webkit-animation-fill-mode: forwards;
    }
    /* The Close Button */
    .close {
    
    }
    .close:hover,
    .close:focus {
      color: #000;
      text-decoration: none;
      cursor: pointer;
    }
    .modal-header {
      color: #5B5B5B;
      font-size: 30px;
      font-family: source-sans-pro, sans-serif;
      font-weight: 300;
      position: relative;
    }
    .modal-body {
      width: 538px;
      color: #7A7A7A;
      font-size: 14px;
      font-family: source-sans-pro, sans-serif;
      font-weight: 400;
      position: relative;
    }
    .modal-footer {
      padding: 2px 16px;
      background-color: #ffffff;
      color: blac;
    }
    
    /* Add Animation */
    @-webkit-keyframes fadeIn {
      from {
        opacity: 0
      }
      
      to {
        opacity: 1
      }
    }
    @-webkit-keyframes fadeOut {
      from {
        opacity: 1
      }
      
      to {
        opacity: 0
      }
    }
    <h2>Animated Modal with Header and Footer</h2>
    
    <!-- Trigger/Open The Modal -->
    <button id="myBtn">Open Modal</button>
    
    <!-- The Overlay -->
    <div id="modalOverlay"></div>
    
    <!-- The Modal -->
    <div id="myModal" class="modal">
    
      <!-- Modal content -->
      <div class="modal-content">
        <div class="modal-header">
          <span class="close">×</span>
          <div class="clearfix grpelem" id="u1562-4">
            <!-- content -->
            <p>test</p>
          </div>
        </div>
        <div class="clearfix colelem" id="u1567-4">
          <!-- content -->
          <p>test</p>
        </div>
        <div class="colelem" id="u1568">
          <!-- simple frame -->
        </div>
        <div class="clearfix colelem" id="u1566-4">
          <!-- content -->
          <p>test</p>
        </div>
        <div class="clip_frame colelem" id="u1556">
          <!-- image -->
          <img class="block" id="u1556_img" src="" alt="" width="823" height="1024" />
        </div>
        <div class="modal-footer">
          <h3>-</h3>
        </div>
      </div>
    
    </div>

    【讨论】:

    • 我喜欢探索所有建议的选项,我不得不说@Phil 我最喜欢你的,正是我想要的!如果我在模态窗口外单击,我将如何将其添加到该部分?
    • 嘿,我已经更新了我的答案并添加了一个覆盖。希望这是你需要的。这是一个很酷的 jQuery - 模态插件:flaviusmatis.github.io/easyModal.js。它轻巧且易于理解。
    • 我迷路了,这个覆盖对我来说很复杂,它确实工作正常!然而,我试图摆脱模态窗口中的滚动条,但在无休止的循环中迷失了方向:(你可能知道如何让它们回到原来的位置吗?
    • 嘿,这并不复杂......我已经在 CSS 文件中编辑了模态大小并添加了一个覆盖 div......覆盖 div 就像关闭按钮一样。滚动条是可见的,因为我在 CSS 的模式选择器内设置了一个覆盖属性。 modal原来的位置是left:0;top:0;宽度:100%;高度:100%;和边距:0;.
    • 嗯,我成功了,非常好,非常感谢!
    【解决方案2】:

    你可以使用 jQuery 来做到这一点

    $('#myBtn').click(function(){
        $('#myModal').fadeIn(5000);
    });
    
    $('.close').click(function(){
        $('#myModal').fadeOut(5000);
    });
    

    【讨论】:

      【解决方案3】:

      我喜欢使用 javascript,所以我使用了 setInterval 函数。

      一旦你想关闭它,你就使用:

      setInterval(myModal.opacity = myModal.opacity - 0.1, 500);
      

      因此,它每 0.5 秒将不透明度更改 -0.1。当然,您可以更改 500 以适应您的褪色速度,或者更改 0.1 以更改不透明度下降的程度。

      【讨论】:

        猜你喜欢
        • 2011-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-23
        • 1970-01-01
        • 2012-05-25
        相关资源
        最近更新 更多