单击表单提交后显示页面加载 gif

时间:2020-12-23 20:36:18

标签: javascript html forms

我有一个简单的用户界面,如下所示: enter image description here

当点击提交时,它会重定向到另一个路由/网址。但是加载下一页需要一点时间,因为当我点击提交按钮时,在后台,它运行很少的机器学习模型。

现在,在此加载和处理期间,我想显示一个页面加载 GIF。在页面加载的显示过程中,我希望我的表单淡出并且只在页面中间显示 GIF。

我尝试了不同的方法来做到这一点,但似乎效果不佳。

表单提交代码:

<form class="form-signin" id="myform" action="data" method="post" enctype="multipart/form-data">
        <p class="form-signin-heading">upload input sample in csv format to run the model inference</p>

        <input class="form-control-file" type="file" name="upload-file" value="">
        <input class="form-control-file" type="submit" name="" value="Submit">
</form>

有什么帮助吗?

2 个答案:

答案 0 :(得分:2)

这可能是一个起点。单击提交按钮时,表单将完全淡出,并出现微调器。后端处理完毕后,重定向将加载新页面。

const form = document.getElementById('myform');
const spinner = document.getElementById('spinner');

form.addEventListener('submit', (e) => {
  e.preventDefault();
  form.classList.toggle('fade-out');
  spinner.classList.toggle('show');
});
form{
  text-align: center;
  transition: opacity 0.6s ease-out;
}

img{
  display: none;
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
.show{
  display: block;
}

.fade-out{
  opacity: 0;
}
<form class="form-signin" id="myform" action="data" method="post" enctype="multipart/form-data">
    <p class="form-signin-heading">upload input sample in csv format to run the model inference</p>

    <input class="form-control-file" type="file" name="upload-file" value="">
    <input class="form-control-file" type="submit" name="" value="Submit">
</form>
<img src="https://www.dariusland.com/images/load.gif" id="spinner" class="hide">

注意:在js中,我添加了e.preventDefault()来展示demo,但你显然不需要它。

答案 1 :(得分:1)

这应该有效

加载器会在你的页面加载时显示,准备好后会消失

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <title>Page Title</title>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <link rel='stylesheet' type='text/css' media='screen' href='main.css'>
    <script src='main.js'></script>
</head>
<body onload="load()">



    <!--Place your code here-->




    <div class="loader">

              <!--Change the "src" to your preferred loading GIF-->
        <img src="https://media.giphy.com/media/xTk9ZvMnbIiIew7IpW/giphy.gif" alt="">
    </div>

<style>
    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
    }

    .loader {
        display: block;
        position: fixed;
        width: 100vw;
        height: 100vh;
        background-color: rgb(36, 36, 36);
        z-index: 9999;
        justify-content: space-around;
        align-items: center;
        display: flex;
    }

    .loader h1 {
        font-size: 4rem;
        color: #fff;
        -webkit-animation: loader-anim 3s ease-in-out infinite alternate;
        -moz-animation: loader-anim 3s ease-in-out infinite alternate;
        animation: loader-anim 3s ease-in-out infinite alternate;
    }

    @keyframes loader-anim {
    30% {
        transform: translateY(-3vh);
    }
    100% {
        transform: translateY(0);
    }
    }
</style>
<script>
var loader = document.querySelector('.loader');

//The value after the function is a 500ms delay before closing the loader
function load() {
  setTimeout(function(){loader.style.display = "none"}, 500);
}
</script>
</body>
</html>