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日

相关文章

  • Java中使用websocket实现在线聊天功能

    下面我将为您详细讲解如何使用WebSocket实现Java Web应用中的在线聊天功能。 简介 WebSocket是一种协议,它允许客户端与服务端之间建立一个持久性的套接字连接,以实现双方之间的实时通信。 相对于HTTP请求/响应模式,WebSocket的优势在于:- 更少的网络流量。与每次发送HTTP请求并接收响应的通信形式不同,WebSocket允许建立…

    jquery 2023年5月27日
    00
  • jQWidgets jqxDropDownList dropDownVerticalAlignment属性

    jQWidgets jqxDropDownList dropDownVerticalAlignment属性详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件和工具包。jqxDropDownList是Widgets组件的组件。本文将详细介绍jqxDropDownList的dropDownVerticalAlignment属性,包括用…

    jquery 2023年5月10日
    00
  • jQuery日历插件datepicker用法详解

    下面就是关于“jQuery日历插件datepicker用法详解”的完整攻略。 1. 什么是jQuery日历插件datepicker? jQuery日历插件datepicker是一款基于jQuery的日历插件,它能够提供日历的选择、日期格式化、国际化、主题自定义等功能。datepicker的使用非常灵活,可以通过配置参数来控制日历的显示和行为。 2. 如何使用…

    jquery 2023年5月18日
    00
  • jQuery实现checkbox全选、反选及删除等操作的方法详解

    jQuery实现checkbox全选、反选及删除的方法详解 在Web开发中,经常会使用到checkbox多选框,常用的操作包括全选、反选、删除等。通过jQuery框架,实现这些操作非常简单。下面将详细讲解如何使用jQuery实现checkbox的全选、反选以及删除操作。 实现checkbox全选 Checkbox的全选操作可以通过以下步骤实现: 给“全选”的…

    jquery 2023年5月27日
    00
  • jQWidgets jqxComplexInput rtl属性

    以下是关于“jQWidgets jqxComplexInput rtl属性”的完整攻略,包含两个示例说明: 简介 jqxComplexInput 控件的 rtl 属性用于指定控件的文本方向是否为从右到左。当 rtl 属性设置为 true 时,控件的文本方向将从右到左。 详细攻略 以下是 jqxComplexInput 控件 rtl 属性的详细攻略: rtl …

    jquery 2023年5月11日
    00
  • 使用jQuery Ajax功能时需要注意的一个问题(内存溢出)

    当使用jQuery Ajax功能时,可能会遇到一个内存溢出的问题,这可能会导致浏览器崩溃或者运行缓慢。这个问题通常由于在不断地向DOM中添加新元素而导致的。我们可以通过以下几种方式来避免内存溢出问题。 1. 使用detach()方法 在向DOM中添加新元素之前,先使用jQuery的detach()方法将旧元素从DOM中移除并保存至变量中,再向DOM中添加新元…

    jquery 2023年5月28日
    00
  • layui table 参数设置方法

    下面我为你详细讲解“layui table 参数设置方法”的完整攻略。 简介 layui table 是一款基于 layui 前端框架的表格组件,提供了丰富的功能以及灵活的参数设置,支持数据分页、排序、编辑等功能,使得在前端页面上展示数据更加简单、高效。 参数设置方法 layui table 的参数设置可以通过 render 函数的第二个参数进行配置,常用的…

    jquery 2023年5月27日
    00
  • jQWidgets jqxLayout rtl属性

    jQWidgets jqxLayout rtl属性攻略 简介 jQWidgets 是一个基于 jQuery 的 UI 组件库,提供了丰富的 UI 组件工具,可于创建代化应程序。jqxLayout局组用于灵活的布局,可用于构建复杂的用户界面。本攻略将详细介绍 jqxLayout 的 rtl 属性,包括 rtl 属性的使用方法和示例。 rtl属性 jqxLayo…

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