javascript - 为文件输入添加进度条

标签 javascript jquery html css

我想用 jquery 向这个 html 添加一个简单的进度条,最简单的方法是什么?我只需要一个百分比值和一个进度条。

<!DOCTYPE html>
<html>
<body>

<form action="basic.php" method="post" enctype="multipart/form-data">
    Select file to upload:
    <input type="file" name="file" id="file">
    <input type="submit" value="Upload Image" name="submit">
</form>

</body>
</html>

最佳答案

我最近有一个元素,我应该做同样的事情。正如您可能所做的那样,我经历了很多插件,我发现 dmUploader 插件特别有用。它允许您通过拖放以及 input 标签获取图像。该插件可用HERE .

我在 CODEPEN 中创建了一个工作示例,我认为这是学习如何使用此插件的最佳方式。您可能会注意到,从 1 到 290 的 jQuery 代码行只是插件本身。由于插件没有 CDN 链接,我不得不将它粘贴到那里。让我们看一下代码:

HTML

<div class="SciSecPic">
    <i class="fa fa-fw fa-picture-o"></i>
    <label>
        <span>Click to browse your picture</span>
        <input type="file" title='Click to add Files' style="display:none;">
    </label>

    <div class="progress" style=" display:none;">
        <div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;">
  0%
        </div>
    </div>
</div>

你需要一个容器 div,在这个例子中叫做 SciSecPic,一个包含 spaninputlabel里面的标签。记住 input 是隐藏的,你的按钮是你的 span 标签。这就是这个插件的工作原理。然后你可以得到你的进度条,div 与 progress 类,在本例中是一个 Bootstrap 进度条。它主要是不显示的,只有在上传过程中才会显示。

CSS 不需要特殊设置,因此我将跳过该部分并让您引用工作示例。

jQuery - 设置 dmUploader

var readPic;

$(".SciSecPic").each(function () {
    var self = $(this);
    self.dmUploader({
        //url: "/Something/ImageSaver",
        url: "http://posttestserver.com/post.php?dir=ali",
        dataType: "json",
        allowedTypes: "image/*",
        //extraData: {
            //Name: self.data("name"),
            //Id: ~~self.data("id")
        //},
        onInit: function () {

        },
        onNewFile: function (id, file) {

            // showing progressbar
            $(this).find(".progress").show(200);

            /* preparing image for preview */
            if (typeof FileReader !== "undefined") {

                var reader = new FileReader();
                reader.onload = function (e) {
                    readPic = e.target.result;
                }

                reader.readAsDataURL(file);
            };

        },
        onUploadProgress: function (id, percent) {
            $(this).find(".progress-bar").width(percent + "%").attr("aria-valuenow", percent).text(percent + "%");
        },
        onComplete: function () {

            var thisEl = $(this);

            addPic(thisEl, readPic);

            // to fadeout and reset the progress bar at the end
            setTimeout(function () {
                thisEl.find(".progress").hide(200, function () {
                    thisEl.find(".progress-bar").width("0%").attr("aria-valuenow", 0).text("0%");
                })
            }, 300);
        }
    });
});

该变量只是一个占位符,用于存储图像的 dataURL,以便稍后在上传完成时显示。如果您使用 MVC,则必须将 url 更改为 PHP 或 Controller 中的 .php 文件,这必然会发生什么。您还可以使用 extraData 方法添加额外数据。 dmUploader 为您提供了不同的回调函数。他们非常不言自明。例如,onUploadProgress 是您可以获取上传百分比并将其显示在进度条中的地方,onNewFile 是您可以显示进度条并读取 dataURL 中的图像的地方格式以在您的 HTML 标记中随时显示它,最重要的是 onComplete 上传完成后您可以在其中执行任何您想做的事情。这是我调用 addPic 函数的地方,我编写了该函数以在输入框顶部显示上传的图片。

为了简短回答,我不会在这里解释或复制addPic函数。顺便说一句,它很容易理解。差不多就是这样。现在你可以拥有你的 dmUploader。

关于javascript - 为文件输入添加进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35108438/

相关文章:

javascript - 使用键作为变量的 Angular 翻译不起作用

javascript - 在 OdinMonkey 中优化 asm.js

javascript - JQuery 检查复选框是否被选中

javascript - summernote airMode 在 div 中无法正常工作

html - 如何对齐输入 datetime-local 的下拉列表

javascript - AngularJS 与 Karma : $controller not defined error

javascript - 使用 PhantomJS 选择菜单项

jQuery - 检查某个部分中的所有必填字段是否已得到回答

html - 手机复选框后面的汉堡菜单,但它不起作用

android - 如何从 HTML 页面打开手机摄像头?