我想爲我的網站製作加載器動畫樣式。加載動畫是16個條形,按順序增加和減少。例如,第一個小節會增加,然後回到原始大小。然後下一個小節將重複這個過程,直到所有小節完成它,然後停止該過程並顯示頁面。在這種情況下,因爲JavaScript在調用函數上是異步的,所以我用一個承諾來解決它。承諾的使用是在前一個動畫完成後爲動畫條添加動畫。目前,我的代碼只會動畫第一個欄並停在那裏。它不會繼續爲其他人創造動力。以下是我的所有代碼:Javascript:Promise().then does not work
重要! 問題在JavaScript上。不要花時間在HTML或CSS上。
var index = -1;
function loading(){
\t var loader = document.getElementById("loader");
\t display = window.getComputedStyle(loader).display;
\t if (display == "block"){
\t \t var child = document.getElementById("loader-ul").getElementsByTagName("div");
\t \t index = index + 1;
\t \t alert("dd");
\t \t animate(child);
\t }
}
function animate(element){
\t var el = element[index];
\t var MaxHeight = false;
\t var finished = false;
\t function anim(){
\t \t return new Promise(function(resolve, reject){
\t \t \t if (finished == false){
\t \t \t \t if (MaxHeight == false){
\t \t \t \t \t var height = parseInt(window.getComputedStyle(el).height.slice(0, -2));
\t \t \t \t \t var Bot = parseFloat(window.getComputedStyle(el).bottom.slice(0, -2));
\t \t \t \t \t height = height + 1;
\t \t \t \t \t Bot = Bot + 0.5;
\t \t \t \t \t el.style.bottom = Bot + "px";
\t \t \t \t \t el.style.height = height + "px";
\t \t \t \t \t if (height <= 100){
\t \t \t \t \t \t window.requestAnimationFrame(anim);
\t \t \t \t \t }
\t \t \t \t \t else{
\t \t \t \t \t \t MaxHeight = true;
\t \t \t \t \t }
\t \t \t \t }
\t \t \t \t if (MaxHeight == true){
\t \t \t \t \t var height = parseInt(window.getComputedStyle(el).height.slice(0, -2));
\t \t \t \t \t var Bot = parseFloat(window.getComputedStyle(el).bottom.slice(0, -2));
\t \t \t \t \t height = height - 1;
\t \t \t \t \t Bot = Bot - 0.5;
\t \t \t \t \t el.style.bottom = Bot + "px";
\t \t \t \t \t el.style.height = height + "px";
\t \t \t \t \t if (height >= 50){
\t \t \t \t \t \t window.requestAnimationFrame(anim);
\t \t \t \t \t }
\t \t \t \t \t else{
\t \t \t \t \t \t MaxHeight = true;
\t \t \t \t \t \t finished = true;
\t \t \t \t \t \t el.style.bottom = 0 + "px";
\t \t \t \t \t \t el.style.height = 50 + "px";
\t \t \t \t \t }
\t \t \t \t }
\t \t \t }
\t \t \t else{
\t \t \t \t resolve();
\t \t \t }
\t \t });
\t }
\t anim().then(loading);
}
body{
\t margin: 0px;
\t padding: 0px;
\t margin: auto;
}
#loader{
\t display: block;
\t position: fixed;
\t height: 100%;
\t width: 100%;
\t background-color: white;
\t z-index: 9999;
}
#loader .center{
\t position: relative;
\t height: 50px;
\t width: 200px;
\t background-color: red;
\t top: 50%;
\t transform: translateY(-50%);
\t margin: auto;
}
#loader .center div{
\t width: 2px;
\t height: 50px;
\t background-color: blue;
\t float: left;
\t padding: 0px;
\t margin-right: 5px;
\t margin-bottom: 25px;
\t position: relative;
}
<body onload="loading()">
<div id="loader">
\t \t \t <div class="center" id="loader-ul">
\t \t \t \t <div></div>
\t \t \t \t <div></div>
\t \t \t \t <div></div>
\t \t \t \t <div></div>
\t \t \t \t <div></div>
\t \t \t \t <div></div>
\t \t \t \t <div></div>
\t \t \t \t <div></div>
\t \t \t \t <div></div>
\t \t \t \t <div></div>
\t \t \t \t <div></div>
\t \t \t \t <div></div>
\t \t \t \t <div></div>
\t \t \t \t <div></div>
\t \t \t \t <div></div>
\t \t \t \t <div></div>
\t \t \t </div>
\t \t </div>
\t </body>
我也有一個鏈接到的jsfiddle:
https://jsfiddle.net/6227jjen/
謝謝大家!
注: 我已經添加了一些警報用於調試目的。
請刪除您的HTML和CSS,這是風馬牛不相及的問題,也會干擾你的問題。 –
我同意,但我只添加運行剪切。 – GeorGios
您的小提琴存在問題 - 請參閱控制檯:加載未定義。您需要在您的JS選項中不包裝
。 –