htmx:xhr:progress

htmx:xhr:progress 是 HTMX 中的一个自定义事件,用于监听 AJAX 请求(XHR)传输过程中的“进度(progress)事件”,通常用于显示上传或下载进度条。

在发送 HTMX 请求时,如果该请求是通过 XHR(XMLHttpRequest) 发送的,并且支持进度监控(如上传文件),那么在数据传输过程中,HTMX 会触发该事件。

用于绑定监听器来实时更新上传/下载进度(如百分比或进度条)。

示例:上传文件并显示进度条

HTML + HTMX 代码:

<form 
  hx-post="/upload" 
  hx-encoding="multipart/form-data" 
  hx-trigger="change from:#file-input"
  hx-target="#result" 
  hx-indicator="#progress-bar">
  
  <input type="file" name="file" id="file-input" />
</form>

<div id="progress-container" style="width: 100%; border: 1px solid #ccc; margin-top: 10px;">
  <div id="progress-bar" style="height: 20px; width: 0%; background: green;"></div>
</div>

<div id="result"></div>

JavaScript 代码:

  document.body.addEventListener("htmx:xhr:progress", function(event) {
    const progressBar = document.getElementById("progress-bar");
    const loaded = event.detail.event.loaded;
    const total = event.detail.event.total;

    if (total > 0) {
      const percent = (loaded / total) * 100;
      progressBar.style.width = percent + "%";
    }
  });

注意事项:

  • 仅对支持进度事件的请求有效(如 multipart/form-data 上传)

  • 确保你的请求方式是 POST 或 PUT 并带有内容(上传文件等)

  • 不适用于 GET 请求(无内容上传)