You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script表单提交后加载动画集成问题求助

解决Google Apps Script表单提交时显示加载动画的问题

问题说明

我需要在Google Apps Script的index.html中,实现表单提交后到Swal.fire成功提示弹出的延迟阶段显示加载动画,但尝试集成自己编写的独立加载动画代码后未成功。

解决方案

只需对现有index.html进行以下3处修改,即可完成加载动画的集成:

1. 插入加载动画样式

在<head>标签内添加加载动画的CSS代码:

/* Preloder */
#preloder {
    display: none;
    position: fixed;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    z-index: 999999;
    background: #ffffff;
}

.loader {
    width: 50px;
    height: 50px;
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -20px;
    margin-left: -20px;
    border-radius: 60px;
    animation: loader 0.8s linear infinite;
    -webkit-animation: loader 0.8s linear infinite;
}

@keyframes loader {
    0% {
        -webkit-transform: rotate(0deg);
        transform: rotate(0deg);
        border: 4px solid #056d4d;      
        border-left-color: transparent;
    }
    50% {
        -webkit-transform: rotate(180deg);
        transform: rotate(180deg);
        border: 4px solid #056d4d;
        border-left-color: transparent;
    }
    100% {
        -webkit-transform: rotate(360deg);
        transform: rotate(360deg);
        border: 4px solid #056d4d;
        border-left-color: transparent;
    }
}

@-webkit-keyframes loader {
    0% {
        -webkit-transform: rotate(0deg);
        border: 4px solid #056d4d;
        border-left-color: transparent;
    }
    50% {
        -webkit-transform: rotate(180deg);
        border: 4px solid #056d4d;
        border-left-color: transparent;
    }
    100% {
        -webkit-transform: rotate(360deg);
        border: 4px solid #056d4d;
        border-left-color: transparent;
    }
}

2. 添加加载动画DOM元素

在<body>标签的最顶部插入加载动画的HTML结构:

<!-- Page Preloder -->
<div id="preloder">
    <div class="loader"></div>
</div>

3. 修改表单提交与成功回调函数

更新<script>中的handleFormSubmit和success函数,控制加载动画的显示与隐藏:

function handleFormSubmit() {
    // 提交时显示加载动画
    $("#preloder").fadeIn();
    
    var formdata = $('#myForm').serializeArray()
    formdata.push({
      name: 'myfile',
      value: myfile
    })
    google.script.run.withSuccessHandler(success).processForm(formdata);
}

function success(){
     // 处理完成后隐藏加载动画
     $("#preloder").fadeOut();
     
     document.getElementById("myForm").reset()
     Swal.fire({
      position: 'center',
      icon: 'success',
      title: '发送成功!我们会尽快联系你',
      showConfirmButton: true,
    })
}

完整修改后的index.html

<!DOCTYPE html>
<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"
        integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css"
        integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
  
    <!-- 加载动画样式 -->
    <style>
        /* Preloder */
        #preloder {
            display: none;
            position: fixed;
            width: 100%;
            height: 100%;
            top: 0;
            left: 0;
            z-index: 999999;
            background: #ffffff;
        }

        .loader {
            width: 50px;
            height: 50px;
            position: absolute;
            top: 50%;
            left: 50%;
            margin-top: -20px;
            margin-left: -20px;
            border-radius: 60px;
            animation: loader 0.8s linear infinite;
            -webkit-animation: loader 0.8s linear infinite;
        }

        @keyframes loader {
            0% {
                -webkit-transform: rotate(0deg);
                transform: rotate(0deg);
                border: 4px solid #056d4d;      
                border-left-color: transparent;
            }
            50% {
                -webkit-transform: rotate(180deg);
                transform: rotate(180deg);
                border: 4px solid #056d4d;
                border-left-color: transparent;
            }
            100% {
                -webkit-transform: rotate(360deg);
                transform: rotate(360deg);
                border: 4px solid #056d4d;
                border-left-color: transparent;
            }
        }

        @-webkit-keyframes loader {
            0% {
                -webkit-transform: rotate(0deg);
                border: 4px solid #056d4d;
                border-left-color: transparent;
            }
            50% {
                -webkit-transform: rotate(180deg);
                border: 4px solid #056d4d;
                border-left-color: transparent;
            }
            100% {
                -webkit-transform: rotate(360deg);
                border: 4px solid #056d4d;
                border-left-color: transparent;
            }
        }
    </style>
</head>
<body>
    <!-- 加载动画元素 -->
    <div id="preloder">
        <div class="loader"></div>
    </div>

    <div class="container py-5">
        <div class="row">
            <div class="col-lg-5 col-md-8 mx-auto shadow border bg-white p-4 rounded">
                <nav class="navbar navbar-dark bg-primary">
                    <a class="navbar-brand" href="#" fw-bold mb-3>WRITE YOUR QUERY / MESSAGE</a>
                </nav>
                <br>
                <form id="myForm" onsubmit="handleFormSubmit()">
                    <div id="form_alerts"></div>
                    <div class="form-group mb-3">
                        <label for="name">Name</label>
                        <input type="text" class="form-control" id="name" placeholder="Enter your Name here|" name="name"required>
                    </div>

                    <div class="form-group mb-3">
                        <label for="email" >Email</label>
                        <input type="email"  class="form-control" id="email" placeholder="Enter your email address here|" name="email" required>
                    </div>

                    <div class="form-group mb-3">
                        <label for="phone">phone number</label>
                        <input type="tel" id="phone" class="form-control" name="phone" placeholder="Enter your phone number here with country code|" pattern="[+]{1}[0-9]{2}[0-9]{10}" required>
                        <small>requested example Format: +919263943858</small>
                    </div>

                    <div class="form-group mb-3">
                        <label for="message">Message</label>
                        <textarea class="form-control" id="message" placeholder="Write your message here|" name="message" required ></textarea>
                    </div>

                    <div class="form-group mb-3">
                        <label for="uploadFile">Upload File</label>
                        <input type="file" class="form-control" File="file" id="file">
                        <small>For multiple/bigger file size please attach/share via google drive link in message section.</small>
                    </div>

                    <button type="submit" class= "btn btn-primary btn-block">SEND</button>
                </form>
            </div>
        </div>
    </div>

    <script>
        function preventFormSubmit() {
                var forms = document.querySelectorAll('form');
                for (var i = 0; i < forms.length; i++) {
                    forms[i].addEventListener('submit',
                     function (event) {
                        event.preventDefault();
                    });
                }
            }
            window.addEventListener('load', preventFormSubmit);
            
            function handleFormSubmit() {
                // 显示加载动画
                $("#preloder").fadeIn();
                
                var formdata = $('#myForm').serializeArray()
                formdata.push({
                  name: 'myfile',
                  value: myfile
                })
                google.script.run.withSuccessHandler(success).processForm(formdata);
            }
            
            function success(){
                 // 隐藏加载动画
                 $("#preloder").fadeOut();
                 
                 document.getElementById("myForm").reset()
                 Swal.fire({
                  position: 'center',
                  icon: 'success',
                  title: 'Sended successfully! Be ready we will contact you shortly',
                  showConfirmButton: true,
                })
            }
            
        var myfile ={},file, reader = new FileReader();
        reader.onloadend = function(e) {
            myfile.data = e.target.result
            myfile.name = file.name
            console.log(myfile)
        };
        $('#file').change(function(){
            file = $('#file')[0].files[0]
            reader.readAsDataURL(file);
        })
    </script>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
    <script src="//cdn.jsdelivr.net/npm/sweetalert2@11"></script>
</body>
</html>

内容的提问来源于stack exchange,提问作者ankit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:54:55