前端上传文件动态控制进度条动画

效果图:
在这里插入图片描述
1.引用bootstrap和jquery文件

<link href="css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
<script src="js/jquery.min.js?v=2.1.4"></script>
<script src="js/bootstrap.min.js?v=3.3.6"></script>

2.html页面布局

                        <div class="form-group">
                            <label class="col-sm-3 control-label"><span class="red">*</span>封面视频:</label>
                            <div class="col-sm-8">
                                <input id="video" type="file" style="display:none">
                                <button class="btn stationBut" onclick="$('input[id=video]').click();" type="button">本地上传</button>
                                <span style="line-height:30px;">(亦可直接填写URL,仅限站内资源)</span>
                                <div class="input-append">
                                    <input id="videoCover" class="form-control" type="text" style="height:30px;">
                                </div>
                                <div class="progress progress-striped active" id="loaderCenter">  //显示进度条动画
                                    <div id="loader" class="progress-bar progress-bar-success">
                                    </div>
                                </div>
                            </div>
                        </div>

3.上传文件

            $('input[id=video]').change(function () {
                mydata = document.getElementById("video").files[0];
                var formData = new FormData();
                $.ajax({
                    url: api.UploadVideo,
                    type: "post",
                    data: formData,
                    processData: false, // 告诉jQuery不要去处理发送的数据
                    contentType: false, // 告诉jQuery不要去设置Content-Type请求头
                    success: function (data) {
                        let content = JSON.parse(data);
                          $('#videoCover').val(content.url);  //获取url
                            $("#loaderCenter").hide();
                    },
                    error: function () {
                        console.log("失败")
                    }
                })
            });

        })

4.监听上传进度

 // 上传进度
        var xhrOnProgress = function (fun) {
            xhrOnProgress.onprogress = fun; //绑定监听
            //使用闭包实现监听绑
            return function () {
                //通过$.ajaxSettings.xhr();获得XMLHttpRequest对象
                var xhr = $.ajaxSettings.xhr();
                //判断监听函数是否为函数
                if (typeof xhrOnProgress.onprogress !== 'function')
                    return xhr;
                //如果有监听函数并且xhr对象支持绑定时就把监听函数绑定上去
                if (xhrOnProgress.onprogress && xhr.upload) {
                    xhr.upload.onprogress = xhrOnProgress.onprogress;
                }
                return xhr;
            }
        }

5.利用progress事件接收到响应期间持续不断触发

         $.ajax({
                    url: api.UploadVideo,
                    type: "post",
                    data: formData,
                    processData: false, // 告诉jQuery不要去处理发送的数据
                    contentType: false, // 告诉jQuery不要去设置Content-Type请求头
                    xhr: xhrOnProgress(function (e) {
                        $("#loaderCenter").show()
                        var percent = 100 * e.loaded / e.total; //文件上传百分比
                        $("#loader").html(parseInt(percent) + "%") //数字百分比
                        var loaderbox = document.getElementById('loader');
                        loaderbox.style.width = parseInt(percent) + "%";//进度条宽度百分比
                    }),
                    success: function (data) {
                    },
                    error: function () {
                        console.log("失败")
                    }
                })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值