jQuery实现简单的文件上传进度条效果

要实现文件上传进度条效果,可以使用jQuery和HTML5的File API,具体步骤如下:

步骤一:HTML代码

首先,在HTML页面中添加一个表单元素,用于选择文件。例如:

<form id="uploadForm" action="upload.php" method="post" enctype="multipart/form-data">
  <input type="file" name="file" id="file"><br>
  <input type="submit" value="Upload File">
</form>

步骤二:jQuery代码

  1. 给表单元素绑定submit事件,阻止表单默认提交行为,使用ajax方式提交表单数据。
$('#uploadForm').submit(function(event) {
  event.preventDefault(); // 阻止表单默认提交
  // 使用ajax方式提交表单数据
});
  1. 在ajax提交之前,先获取文件信息,使用FormData对象进行封装。使用ajax提交FormData,实现文件上传。
var formData = new FormData();
formData.append('file', $('#file')[0].files[0]);
$.ajax({
  url: 'upload.php',
  type: 'POST',
  data: formData,
  processData: false,
  contentType: false,
  success: function(data) {
    console.log('Success: ' + data);
  },
  error: function(jqXHR, textStatus, errorThrown) {
    console.error('Error: ' + textStatus, errorThrown);
  }
});
  1. 实现上传进度条效果。jQuery使用XHR对象实现ajax,可以利用其提供的progress事件,获得上传进度信息,从而实现实时更新进度条。
var xhr = $.ajaxSettings.xhr();
xhr.upload.addEventListener('progress', function(event) {
  if (event.lengthComputable) {
    var percentComplete = Math.round(event.loaded / event.total * 100);
    console.log('Progress: ' + percentComplete + '%');
    // 更新进度条
  }
}, false);
$.ajax({
  url: 'upload.php',
  type: 'POST',
  data: formData,
  processData: false,
  contentType: false,
  xhr: function() { // 返回jquery提供的XHR对象,用于监听progress事件
    return xhr;
  },
  success: function(data) {
    console.log('Success: ' + data);
  },
  error: function(jqXHR, textStatus, errorThrown) {
    console.error('Error: ' + textStatus, errorThrown);
  }
});
  1. 完整的jQuery代码示例:
$('#uploadForm').submit(function(event) {
  event.preventDefault(); // 阻止表单默认提交
  var formData = new FormData();
  formData.append('file', $('#file')[0].files[0]);
  var xhr = $.ajaxSettings.xhr();
  xhr.upload.addEventListener('progress', function(event) {
    if (event.lengthComputable) {
      var percentComplete = Math.round(event.loaded / event.total * 100);
      console.log('Progress: ' + percentComplete + '%');
      // 更新进度条
    }
  }, false);
  $.ajax({
    url: 'upload.php',
    type: 'POST',
    data: formData,
    processData: false,
    contentType: false,
    xhr: function() { // 返回jquery提供的XHR对象,用于监听progress事件
      return xhr;
    },
    success: function(data) {
      console.log('Success: ' + data);
    },
    error: function(jqXHR, textStatus, errorThrown) {
      console.error('Error: ' + textStatus, errorThrown);
    }
  });
});

示例说明

在上面的jQuery代码示例中,我们使用了ajax进行文件上传,并利用XHR对象的progress事件实现了上传进度条效果。

为了更直观地演示该效果,我们可以在页面上添加一个进度条元素,如下:

<div id="progressBar"></div>

然后,在progress事件中更新进度条的宽度即可:

if (event.lengthComputable) {
  var percentComplete = Math.round(event.loaded / event.total * 100);
  console.log('Progress: ' + percentComplete + '%');
  // 更新进度条
  $('#progressBar').css('width', percentComplete + '%');
}

具体实现可以参考下面的示例:

示例一

一个简单的文件上传进度条示例,使用Bootstrap样式美化进度条。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>jQuery File Upload Progress Demo</title>
  <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
  <style>
    #progressBar {
      height: 20px;
      background-color: #f5f5f5;
      border-radius: 4px;
      -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
      box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
      -webkit-transition: width .4s ease-in-out;
      -o-transition: width .4s ease-in-out;
      transition: width .4s ease-in-out;
    }
  </style>
</head>
<body>
  <div class="container">
    <h2>jQuery File Upload Progress Demo</h2>
    <form id="uploadForm" action="upload.php" method="post" enctype="multipart/form-data">
      <div class="form-group">
        <label for="file">Choose File:</label>
        <input type="file" name="file" id="file" class="form-control">
      </div>
      <input type="submit" value="Upload File" class="btn btn-primary">
    </form>
    <div class="progress">
      <div id="progressBar" class="progress-bar"></div>
    </div>
  </div>
  <script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
  <script>
    $('#uploadForm').submit(function(event) {
      event.preventDefault(); // 阻止表单默认提交
      var formData = new FormData();
      formData.append('file', $('#file')[0].files[0]);
      var xhr = $.ajaxSettings.xhr();
      xhr.upload.addEventListener('progress', function(event) {
        if (event.lengthComputable) {
          var percentComplete = Math.round(event.loaded / event.total * 100);
          console.log('Progress: ' + percentComplete + '%');
          $('#progressBar').css('width', percentComplete + '%');
        }
      }, false);
      $.ajax({
        url: 'upload.php',
        type: 'POST',
        data: formData,
        processData: false,
        contentType: false,
        xhr: function() { // 返回jquery提供的XHR对象,用于监听progress事件
          return xhr;
        },
        success: function(data) {
          console.log('Success: ' + data);
        },
        error: function(jqXHR, textStatus, errorThrown) {
          console.error('Error: ' + textStatus, errorThrown);
        }
      });
    });
  </script>
</body>
</html>

示例二

一个带有取消上传按钮和上传完成提示的文件上传进度条示例,使用Bootstrap样式美化进度条。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>jQuery File Upload Progress Demo</title>
  <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
  <style>
    #progressBar {
      height: 20px;
      background-color: #f5f5f5;
      border-radius: 4px;
      -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
      box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
      -webkit-transition: width .4s ease-in-out;
      -o-transition: width .4s ease-in-out;
      transition: width .4s ease-in-out;
    }

    #cancelUploadButton {
      margin-left: 10px;
    }

    #uploadCompleteMessage {
      color: #005500;
      font-weight: bold;
    }
  </style>
</head>
<body>
  <div class="container">
    <h2>jQuery File Upload Progress Demo</h2>
    <form id="uploadForm" action="upload.php" method="post" enctype="multipart/form-data">
      <div class="form-group">
        <label for="file">Choose File:</label>
        <input type="file" name="file" id="file" class="form-control">
      </div>
      <input type="submit" value="Upload File" class="btn btn-primary">
      <button id="cancelUploadButton" type="button" class="btn btn-default">Cancel</button>
    </form>
    <div class="progress">
      <div id="progressBar" class="progress-bar"></div>
    </div>
    <div id="uploadCompleteMessage"></div>
  </div>
  <script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
  <script>
    var xhr;
    $('#uploadForm').submit(function(event) {
      event.preventDefault(); // 阻止表单默认提交
      var formData = new FormData();
      formData.append('file', $('#file')[0].files[0]);
      xhr = $.ajaxSettings.xhr();
      xhr.upload.addEventListener('progress', function(event) {
        if (event.lengthComputable) {
          var percentComplete = Math.round(event.loaded / event.total * 100);
          console.log('Progress: ' + percentComplete + '%');
          $('#progressBar').css('width', percentComplete + '%');
        }
      }, false);
      xhr.addEventListener('load', function(event) {
        if (event.target.status === 200) {
          console.log('Upload complete.');
          $('#cancelUploadButton').hide();
          $('#uploadCompleteMessage').html('Upload Complete!').show();
        }
      }, false);
      xhr.addEventListener('error', function(event) {
        console.error('Error: ' + event.target.status, event.target.statusText);
      }, false);
      xhr.addEventListener('abort', function(event) {
        console.log('Upload cancelled.');
      }, false);
      $.ajax({
        url: 'upload.php',
        type: 'POST',
        data: formData,
        processData: false,
        contentType: false,
        xhr: function() { // 返回jquery提供的XHR对象,用于监听progress事件
          return xhr;
        },
        success: function(data) {
          console.log('Success: ' + data);
        },
        error: function(jqXHR, textStatus, errorThrown) {
          console.error('Error: ' + textStatus, errorThrown);
        }
      });
    });

    $('#cancelUploadButton').click(function() {
      if (xhr) {
        xhr.abort(); // 取消上传
        console.log('Upload cancelled.');
      }
    });
  </script>
</body>
</html>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jQuery实现简单的文件上传进度条效果 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQWidgets jqxGrid showstatusbar属性

    jQWidgets 是一个流行的 JavaScript UI 库,提供了许多可定制的 UI 组件。其中一个组件是 jqxGrid,它是一个用于创建网格的控件。jqxGrid 组件提供许多属性,其中之一是 showstatusbar 属性。下面是关于 jqxGrid 的 showstatusbar 属性的详细攻略: showstatusbar 属性概述 sho…

    jquery 2023年5月11日
    00
  • jQWidgets jqxRibbon scrollPosition属性

    jQWidgets是一个使用JavaScript语言编写的完善的UI插件库,支持多种UI组件和丰富的主题。其中,jqxRibbon是一个功能强大的UI组件,用于创建用户友好的界面,它的scrollPosition属性可以控制Ribbon的滚动位置。 scrollPosition属性的意义和用法 scrollPosition属性用于滚动控制,可以改变默认滚动条…

    jquery 2023年5月11日
    00
  • jQuery中(function($){})(jQuery)详解

    题目所提到的 jQuery中(function($){})(jQuery) 是一个常见的jQuery插件方式,这种方式也被称为“自执行函数插件模式”。下面我将对此进行详细的讲解。 什么是自执行函数插件模式 自执行函数插件模式是一种用来扩展jQuery功能的常见方式。其主要思想是将插件代码封装到一个自执行的匿名函数闭包内部,以避免污染全局作用域。该插件会在立即…

    jquery 2023年5月27日
    00
  • Jquery 动态循环输出表格具体方法

    下面是针对”Jquery 动态循环输出表格具体方法”的完整攻略: 1. 前置知识 在了解动态循环输出表格具体方法前,需要先掌握以下知识: HTML表格的基本结构 CSS样式表的语法 JQuery库的基础用法 JavaScript数组的基本操作 2. 常规方法 通常情况下,我们可以使用指定行列以及单元格的方式来创建、增删表格元素。代码如下: <html&…

    jquery 2023年5月27日
    00
  • jQuery UI对话框可调整大小的选项

    以下是关于 jQuery UI 对话框可调整大小的选项的详细攻略: jQuery UI 对话框可调整大小的选项 jQuery UI 对话框可调整大小的选项允许用户调对话框的大小。可以使用 resizable 选项来启用对话框的可调整大小功能。 语法 $( "#dialog" ).dialog({ resizable: true }); 示…

    jquery 2023年5月11日
    00
  • jQuery下通过replace字符串替换实现大小图片切换

    为了实现在网页中切换大小两张图片,我们可以使用jQuery的replace函数进行图像文件名的字符串替换。下面是详细攻略: 第一步:准备两张不同尺寸的图片 在本例中,我们准备的是两张猫咪图片,一张尺寸较大,另一张尺寸较小。图片的大小尺寸可以根据实际需求自行设置。 <img src="big-cat.jpg" class="…

    jquery 2023年5月28日
    00
  • 用jQuery实现检测浏览器及版本的脚本代码

    使用jQuery可以很方便地检测用户浏览器及版本信息,下面是示例代码及详细说明: 1. 检测浏览器名称 $(function () { var browserName = getBrowserName(); alert(browserName); }); function getBrowserName() { var userAgent = navigato…

    jquery 2023年5月28日
    00
  • jQuery操作JSON的CRUD用法实例

    “jQuery操作JSON的CRUD用法实例”可以分为创建(Create)、读取(Read)、修改(Update)、删除(Delete)四个步骤来实现。下面将详细讲解这些步骤的用法。 创建数据(Create) 首先,需要定义一个JSON对象,用来存放需要添加到数据中的信息。比如,我们要添加一个名为“Tom”的人员信息,年龄为25岁,使用jQuery的$.aj…

    jquery 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部