最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue.js實(shí)現(xiàn)下載時(shí)暫?;謴?fù)下載

 更新時(shí)間:2025年01月31日 09:58:57   作者:LCG元  
本文主要介紹了Vue.js實(shí)現(xiàn)下載時(shí)暫停恢復(fù)下載,通過(guò)使用XMLHttpRequest對(duì)象來(lái)控制下載過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在 Vue 中實(shí)現(xiàn)下載時(shí)暫停和恢復(fù)功能,通??梢越柚?nbsp;XMLHttpRequest 對(duì)象來(lái)控制下載過(guò)程。XMLHttpRequest 允許在下載過(guò)程中暫停和繼續(xù)請(qǐng)求。

實(shí)現(xiàn)步驟

  • 創(chuàng)建 Vue 組件:創(chuàng)建一個(gè) Vue 組件,包含下載、暫停和恢復(fù)按鈕。
  • 初始化 XMLHttpRequest 對(duì)象:在組件中初始化一個(gè) XMLHttpRequest 對(duì)象,用于處理下載請(qǐng)求。
  • 實(shí)現(xiàn)下載功能:通過(guò) XMLHttpRequest 發(fā)起下載請(qǐng)求,并監(jiān)聽(tīng)下載進(jìn)度。
  • 實(shí)現(xiàn)暫停功能:暫停 XMLHttpRequest 請(qǐng)求。
  • 實(shí)現(xiàn)恢復(fù)功能:恢復(fù) XMLHttpRequest 請(qǐng)求。

詳細(xì)代碼

<template>
  <div>
    <!-- 下載按鈕,點(diǎn)擊觸發(fā) downloadFile 方法 -->
    <button @click="downloadFile">下載</button>
    <!-- 暫停按鈕,點(diǎn)擊觸發(fā) pauseDownload 方法 -->
    <button @click="pauseDownload" :disabled="!isDownloading || isPaused">暫停</button>
    <!-- 恢復(fù)按鈕,點(diǎn)擊觸發(fā) resumeDownload 方法 -->
    <button @click="resumeDownload" :disabled="!isPaused">恢復(fù)</button>
    <!-- 顯示下載進(jìn)度 -->
    <p>下載進(jìn)度: {{ progress }}%</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      xhr: null, // 存儲(chǔ) XMLHttpRequest 對(duì)象
      isDownloading: false, // 標(biāo)記是否正在下載
      isPaused: false, // 標(biāo)記是否暫停下載
      progress: 0, // 下載進(jìn)度百分比
      url: 'https://example.com/file.zip', // 下載文件的 URL,需要替換為實(shí)際的文件 URL
      resumeOffset: 0 // 恢復(fù)下載時(shí)的偏移量
    };
  },
  methods: {
    downloadFile() {
      // 創(chuàng)建一個(gè)新的 XMLHttpRequest 對(duì)象
      this.xhr = new XMLHttpRequest();
      // 打開(kāi)一個(gè) GET 請(qǐng)求,設(shè)置響應(yīng)類(lèi)型為 blob
      this.xhr.open('GET', this.url, true);
      this.xhr.responseType = 'blob';

      // 如果有恢復(fù)偏移量,設(shè)置請(qǐng)求頭的 Range
      if (this.resumeOffset > 0) {
        this.xhr.setRequestHeader('Range', `bytes=${this.resumeOffset}-`);
      }

      // 監(jiān)聽(tīng)下載進(jìn)度事件
      this.xhr.addEventListener('progress', (event) => {
        if (event.lengthComputable) {
          // 計(jì)算下載進(jìn)度百分比
          this.progress = Math.round((this.resumeOffset + event.loaded) / (this.resumeOffset + event.total) * 100);
        }
      });

      // 監(jiān)聽(tīng)請(qǐng)求完成事件
      this.xhr.addEventListener('load', () => {
        this.isDownloading = false;
        this.isPaused = false;
        this.resumeOffset = 0;
        // 創(chuàng)建一個(gè)臨時(shí)的 URL 對(duì)象
        const url = window.URL.createObjectURL(this.xhr.response);
        // 創(chuàng)建一個(gè) <a> 元素
        const a = document.createElement('a');
        a.href = url;
        a.download = 'file.zip'; // 設(shè)置下載文件名
        // 模擬點(diǎn)擊 <a> 元素進(jìn)行下載
        a.click();
        // 釋放臨時(shí) URL 對(duì)象
        window.URL.revokeObjectURL(url);
      });

      // 監(jiān)聽(tīng)請(qǐng)求錯(cuò)誤事件
      this.xhr.addEventListener('error', () => {
        this.isDownloading = false;
        this.isPaused = false;
        console.error('下載出錯(cuò)');
      });

      // 開(kāi)始發(fā)送請(qǐng)求
      this.xhr.send();
      this.isDownloading = true;
      this.isPaused = false;
    },
    pauseDownload() {
      if (this.isDownloading &&!this.isPaused) {
        // 暫停下載,終止 XMLHttpRequest 請(qǐng)求
        this.xhr.abort();
        this.isPaused = true;
        // 記錄當(dāng)前下載的偏移量
        this.resumeOffset += this.xhr.response.byteLength || 0;
      }
    },
    resumeDownload() {
      if (this.isPaused) {
        // 恢復(fù)下載,調(diào)用 downloadFile 方法
        this.downloadFile();
      }
    }
  }
};
</script>

代碼注釋

代碼中的注釋已經(jīng)詳細(xì)解釋了每一步的作用,以下是一些關(guān)鍵部分的總結(jié):

  • downloadFile 方法:創(chuàng)建 XMLHttpRequest 對(duì)象,發(fā)起下載請(qǐng)求,監(jiān)聽(tīng)下載進(jìn)度和完成事件,處理下載完成后的文件保存。
  • pauseDownload 方法:暫停下載,終止 XMLHttpRequest 請(qǐng)求,并記錄當(dāng)前下載的偏移量。
  • resumeDownload 方法:恢復(fù)下載,調(diào)用 downloadFile 方法,并設(shè)置請(qǐng)求頭的 Range 以從指定位置繼續(xù)下載。

使用說(shuō)明

  • 替換文件 URL:將 data 中的 url 屬性替換為實(shí)際要下載的文件的 URL。
  • 引入組件:將上述代碼保存為一個(gè) Vue 組件(例如 DownloadComponent.vue),然后在需要使用的地方引入該組件。
<template>
  <div>
    <DownloadComponent />
  </div>
</template>

<script>
import DownloadComponent from './DownloadComponent.vue';

export default {
  components: {
    DownloadComponent
  }
};
</script>
  • 運(yùn)行項(xiàng)目:在瀏覽器中運(yùn)行 Vue 項(xiàng)目,點(diǎn)擊“下載”按鈕開(kāi)始下載文件,點(diǎn)擊“暫停”按鈕暫停下載,點(diǎn)擊“恢復(fù)”按鈕繼續(xù)下載。

 到此這篇關(guān)于Vue.js實(shí)現(xiàn)下載時(shí)暫?;謴?fù)下載的文章就介紹到這了,更多相關(guān)Vue.js 下載時(shí)暫?;謴?fù)下載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue實(shí)現(xiàn)點(diǎn)擊追加選中樣式效果

    vue實(shí)現(xiàn)點(diǎn)擊追加選中樣式效果

    今天小編就為大家分享一篇vue實(shí)現(xiàn)點(diǎn)擊追加選中樣式效果,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • 最細(xì)致的vue.js基礎(chǔ)語(yǔ)法 值得收藏!

    最細(xì)致的vue.js基礎(chǔ)語(yǔ)法 值得收藏!

    這篇文章主要為大家推薦了一篇值得收藏和學(xué)習(xí)的vue.js最細(xì)致的基礎(chǔ)語(yǔ)法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 基于Vue3和Element Plus實(shí)現(xiàn)自動(dòng)導(dǎo)入功能

    基于Vue3和Element Plus實(shí)現(xiàn)自動(dòng)導(dǎo)入功能

    在 Vue 3 項(xiàng)目中,結(jié)合  Element Plus  實(shí)現(xiàn)自動(dòng)導(dǎo)入可以顯著減少代碼量,提升開(kāi)發(fā)效率,Element Plus 提供了官方的自動(dòng)導(dǎo)入插件  unplugin-vue-components  和  unplugin-auto-import,以下是如何配置和使用的詳細(xì)步驟,需要的朋友可以參考下
    2025-03-03
  • vue攔截器及請(qǐng)求封裝代碼

    vue攔截器及請(qǐng)求封裝代碼

    這篇文章主要介紹了vue攔截器及請(qǐng)求封裝代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • vue中computed和watch的使用實(shí)例代碼解析

    vue中computed和watch的使用實(shí)例代碼解析

    這篇文章主要介紹了vue中computed和watch的綜合運(yùn)用實(shí)例,主要需求是點(diǎn)擊按鈕實(shí)現(xiàn)天氣的切換效果結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Electron集成React和Vue流程方法講解

    Electron集成React和Vue流程方法講解

    Electron也可以快速地將你的網(wǎng)站打包成一個(gè)原生應(yīng)用發(fā)布,下面這篇文章主要給大家介紹了關(guān)于Electron集成React和Vue的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Vue 修改網(wǎng)站圖標(biāo)的方法

    Vue 修改網(wǎng)站圖標(biāo)的方法

    這篇文章主要介紹了Vue 修改網(wǎng)站圖標(biāo)的方法,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-12-12
  • VUE使用DXFParser組件解析dxf文件生成圖片的操作代碼

    VUE使用DXFParser組件解析dxf文件生成圖片的操作代碼

    這篇文章主要介紹了VUE使用DXFParser組件解析dxf文件生成圖片的操作代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Vue的異步渲染axios問(wèn)題

    Vue的異步渲染axios問(wèn)題

    這篇文章主要介紹了Vue的異步渲染axios問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2023-03-03
  • vue實(shí)現(xiàn)電子時(shí)鐘效果

    vue實(shí)現(xiàn)電子時(shí)鐘效果

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)電子時(shí)鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評(píng)論

黄骅市| 周宁县| 绥德县| 浦城县| 汽车| 漠河县| 修水县| 新兴县| 西华县| 忻城县| 营山县| 长岛县| 阿鲁科尔沁旗| 吴江市| 赤城县| 堆龙德庆县| 华池县| 瑞昌市| 云南省| 日喀则市| 水城县| 乐业县| 原阳县| 讷河市| 深圳市| 新干县| 岫岩| 嘉兴市| 磴口县| 安岳县| 岗巴县| 英山县| 万安县| 汕尾市| 沈丘县| 温州市| 肇东市| 揭阳市| 蒙山县| 芷江| 衡南县|