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

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

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

一、效果展示

緩若江海凝清光

二、代碼

const uploadProgress = ref(); //上傳進(jìn)度
//進(jìn)度絲滑更新
//進(jìn)度,時常
const ProgressChange = (targetPercent: number, duration: number) => {
  //performance.now() 是瀏覽器提供的一個高性能時間 API,它返回一個 DOMHighResTimeStamp,
  //這個時間戳提供了當(dāng)前頁面從加載到現(xiàn)在所經(jīng)過的毫秒數(shù),具有很高的精度,適合用來測量腳本執(zhí)行時間、動畫幀間隔等
  const startTime = performance.now();
  //獲取當(dāng)前進(jìn)度
  const startPercent = uploadProgress.value;
  const step = (currentTime: number) => {
    // 計(jì)算當(dāng)前進(jìn)度
    const elapsedTime = currentTime - startTime;
    // 修改進(jìn)度條的百分比實(shí)現(xiàn)動畫效果
    let currentPercent = easeInOut(
      elapsedTime,
      startPercent,
      targetPercent - startPercent,
      duration
    );
    // 確保百分比不超過100且不小于0
    currentPercent = Math.min(Math.max(currentPercent, 0), 100);
    // 更新進(jìn)度條
    uploadProgress.value = Math.round(currentPercent);
    // 如果動畫未結(jié)束,繼續(xù)執(zhí)行動畫
    if (currentPercent < 100 && elapsedTime < duration) {
      requestAnimationFrame(step);
    } else {
      uploadProgress.value = Math.round(targetPercent); // 確保最終值準(zhǔn)確無誤
    }
  };
  // 使用函數(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));
    };
  }

三、實(shí)現(xiàn)原理

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

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

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

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

相關(guān)文章

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

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

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

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

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

    vue中appear的用法

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

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

    隨著 Vue3 項(xiàng)目的業(yè)務(wù)迭代,打包體積過大、首屏加載緩慢逐漸成為影響用戶體驗(yàn)的核心問題,本文將詳細(xì)介紹如何通過精細(xì)化的打包配置,實(shí)現(xiàn)代碼分包、剔除冗余 Console 日志,并結(jié)合最佳實(shí)踐,幫助你將項(xiàng)目打包體積縮減 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é)。所以學(xué)會使用循環(huán)也是重中之重了
    2023-04-04
  • vue?tailwindcss安裝配置教程示例詳解

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

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

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

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

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

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

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

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

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

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

最新評論

北海市| 惠州市| 迁安市| 旺苍县| 辽中县| 师宗县| 鹤壁市| 十堰市| 南阳市| 岳池县| 淅川县| 通辽市| 嵊州市| 进贤县| 堆龙德庆县| 斗六市| 西充县| 都匀市| 文登市| 涪陵区| 拉萨市| 新乡市| 外汇| 太湖县| 德清县| 贡觉县| 龙海市| 金平| 江川县| 周至县| 锡林浩特市| 合肥市| 离岛区| 平潭县| 安仁县| 越西县| 盈江县| 合水县| 临猗县| 泊头市| 乌鲁木齐县|