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

vue實現(xiàn)簡潔文件上傳進度條功能

 更新時間:2024年06月05日 10:26:58   作者:一天只碼五十行  
這篇文章主要介紹了vue實現(xiàn)簡潔文件上傳進度條功能,實現(xiàn)原理是通過performance.now()獲取動畫的時間戳,用于創(chuàng)建流暢的動畫,結(jié)合示例代碼介紹的非常詳細,需要的朋友可以參考下

一、效果展示

緩若江海凝清光

二、代碼

const uploadProgress = ref(); //上傳進度
//進度絲滑更新
//進度,時常
const ProgressChange = (targetPercent: number, duration: number) => {
  //performance.now() 是瀏覽器提供的一個高性能時間 API,它返回一個 DOMHighResTimeStamp,
  //這個時間戳提供了當前頁面從加載到現(xiàn)在所經(jīng)過的毫秒數(shù),具有很高的精度,適合用來測量腳本執(zhí)行時間、動畫幀間隔等
  const startTime = performance.now();
  //獲取當前進度
  const startPercent = uploadProgress.value;
  const step = (currentTime: number) => {
    // 計算當前進度
    const elapsedTime = currentTime - startTime;
    // 修改進度條的百分比實現(xiàn)動畫效果
    let currentPercent = easeInOut(
      elapsedTime,
      startPercent,
      targetPercent - startPercent,
      duration
    );
    // 確保百分比不超過100且不小于0
    currentPercent = Math.min(Math.max(currentPercent, 0), 100);
    // 更新進度條
    uploadProgress.value = Math.round(currentPercent);
    // 如果動畫未結(jié)束,繼續(xù)執(zhí)行動畫
    if (currentPercent < 100 && elapsedTime < duration) {
      requestAnimationFrame(step);
    } else {
      uploadProgress.value = Math.round(targetPercent); // 確保最終值準確無誤
    }
  };
  // 使用函數(shù)使動畫更加平滑
  const easeInOut = (t: number, b: number, c: number, d: number) => {
    t /= d / 2;
    if (t < 1) return (c / 2) * t * t * t + b;
    t -= 2;
    return (c / 2) * (t * t * t + 2) + b;
  };
  requestAnimationFrame(step);
};
//選擇文件
const handleFileChange = async (event: any) => {
  uploadProgress.value = 0;
  const file = event.target.files[0];
  fileNmae.value = file.name;
  if (file) {
    const reader = new FileReader();
    const updateProgress = (event: ProgressEvent) => {
      if (event.lengthComputable) {
        const totalDuration = 1000; // 1秒,單位為毫秒
        const percentComplete = (event.loaded / event.total) * 100;
        ProgressChange(percentComplete, totalDuration);
      }
    };
    reader.readAsDataURL(file);
    reader.onprogress = updateProgress;
    reader.onload = (e) => {
      if (typeof e.target?.result == "string") {
        imageUrl.value = e.target.result;
      }
      reader.onprogress = null;
      fileInfo.size = Number((file.size / 1024).toFixed(2));
    };
  }

三、實現(xiàn)原理

1.通過performance.now()獲取動畫的時間戳,用于創(chuàng)建流暢的動畫。

2.通過一個緩動函數(shù)來實現(xiàn)動畫的過渡效果。

3.通過requestAnimationFrame這個API來更新動畫幀,優(yōu)化顯示效果。

到此這篇關(guān)于vue:實現(xiàn)絲滑文件上傳進度條的文章就介紹到這了,更多相關(guān)vue上傳進度條內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 更強大的vue ssr實現(xiàn)預取數(shù)據(jù)的方式

    更強大的vue ssr實現(xiàn)預取數(shù)據(jù)的方式

    這篇文章主要介紹了更強大的 vue ssr 預取數(shù)據(jù)的方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • 優(yōu)雅的將ElementUI表格變身成樹形表格的方法步驟

    優(yōu)雅的將ElementUI表格變身成樹形表格的方法步驟

    這篇文章主要介紹了優(yōu)雅的將ElementUI表格變身成樹形表格的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • vue中appear的用法

    vue中appear的用法

    這篇文章主要介紹了vue中appear的用法,需要的朋友可以參考下
    2017-08-08
  • Vue3進行打包配置的優(yōu)化指南

    Vue3進行打包配置的優(yōu)化指南

    隨著 Vue3 項目的業(yè)務(wù)迭代,打包體積過大、首屏加載緩慢逐漸成為影響用戶體驗的核心問題,本文將詳細介紹如何通過精細化的打包配置,實現(xiàn)代碼分包、剔除冗余 Console 日志,并結(jié)合最佳實踐,幫助你將項目打包體積縮減 70%,首屏加載速度提升 60%
    2026-06-06
  • Vue處理循環(huán)數(shù)據(jù)流程示例精講

    Vue處理循環(huán)數(shù)據(jù)流程示例精講

    這篇文章主要介紹了Vue處理循環(huán)數(shù)據(jù)流程,這個又是一個編程語言,?模版語法里面必不可少的一個,?也是使用業(yè)務(wù)場景使用最多的一個環(huán)節(jié)。所以學會使用循環(huán)也是重中之重了
    2023-04-04
  • vue?tailwindcss安裝配置教程示例詳解

    vue?tailwindcss安裝配置教程示例詳解

    這篇文章主要為大家介紹了vue?tailwindcss安裝配置教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Vue中引用assets中圖片的實現(xiàn)方式

    Vue中引用assets中圖片的實現(xiàn)方式

    這篇文章主要介紹了Vue中引用assets中圖片的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue2中使用viewer.js的實現(xiàn)示例

    vue2中使用viewer.js的實現(xiàn)示例

    本文主要介紹了vue2中使用viewer.js的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-10-10
  • Vue項目打包部署到GitHub Pages的實現(xiàn)步驟

    Vue項目打包部署到GitHub Pages的實現(xiàn)步驟

    本文主要介紹了Vue項目打包部署到GitHub Pages的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • 如何在vue3中同時使用tsx與setup語法糖

    如何在vue3中同時使用tsx與setup語法糖

    這篇文章主要介紹了如何在vue3中同時使用tsx與setup語法糖,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09

最新評論

浏阳市| 台山市| 都匀市| 三原县| 庆城县| 塔河县| 靖远县| 广西| 镇坪县| 五大连池市| 临西县| 奇台县| 临海市| 玉山县| 武宁县| 星子县| 霍山县| 庐江县| 怀化市| 准格尔旗| 莎车县| 新乐市| 藁城市| 余干县| 德州市| 湖口县| 承德县| 荥经县| 平度市| 白水县| 敦煌市| 绥阳县| 无为县| 柯坪县| 新竹市| 高唐县| 东辽县| 侯马市| 望城县| 黄浦区| 平武县|