我想为我的网站制作加载器动画样式。加载动画是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选项中不包装
。 –