亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、效果展示

緩若江海凝清光

二、代碼

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

2.通過(guò)一個(gè)緩動(dòng)函數(shù)來(lái)實(shí)現(xiàn)動(dòng)畫(huà)的過(guò)渡效果。

3.通過(guò)requestAnimationFrame這個(gè)API來(lái)更新動(dòng)畫(huà)幀,優(yōu)化顯示效果。

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

相關(guān)文章

  • vue-music關(guān)于Player播放器組件詳解

    vue-music關(guān)于Player播放器組件詳解

    這篇文章主要為大家詳細(xì)介紹了vue-music關(guān)于Player播放器組件的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • vue3使用particles插件實(shí)現(xiàn)粒子背景的方法詳解

    vue3使用particles插件實(shí)現(xiàn)粒子背景的方法詳解

    這篇文章主要為大家詳細(xì)介紹了vue3使用particles插件實(shí)現(xiàn)粒子背景的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 使用vue3-print-nb實(shí)現(xiàn)打印pdf分頁(yè)代碼示例

    使用vue3-print-nb實(shí)現(xiàn)打印pdf分頁(yè)代碼示例

    這篇文章主要介紹了使用vue3-print-nb實(shí)現(xiàn)打印pdf分頁(yè)的相關(guān)資料,這種方法不僅適用于Vue3項(xiàng)目,也可以在其他前端框架中實(shí)現(xiàn)類(lèi)似的打印分頁(yè)功能,需要的朋友可以參考下
    2024-10-10
  • vue項(xiàng)目中axios請(qǐng)求網(wǎng)絡(luò)接口封裝的示例代碼

    vue項(xiàng)目中axios請(qǐng)求網(wǎng)絡(luò)接口封裝的示例代碼

    這篇文章主要介紹了vue項(xiàng)目中axios請(qǐng)求網(wǎng)絡(luò)接口封裝的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • vue.js中關(guān)于點(diǎn)擊事件方法的使用(click)

    vue.js中關(guān)于點(diǎn)擊事件方法的使用(click)

    這篇文章主要介紹了vue.js中關(guān)于點(diǎn)擊事件方法的使用(click),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue+NodeJS實(shí)現(xiàn)大文件上傳的示例代碼

    Vue+NodeJS實(shí)現(xiàn)大文件上傳的示例代碼

    常見(jiàn)的文件上傳方式可能就是new一個(gè)FormData,把文件append進(jìn)去以后post給后端就可以了。但如果采用這種方式來(lái)上傳大文件就很容易產(chǎn)生上傳超時(shí)的問(wèn)題。所以本文將利用Vue+NodeJS實(shí)現(xiàn)大文件上傳,需要的可以參考一下
    2022-05-05
  • 深入了解vue2與vue3的生命周期對(duì)比

    深入了解vue2與vue3的生命周期對(duì)比

    這篇文章主要為大家介紹了vue2與vue3的生命周期對(duì)比,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • 關(guān)于移動(dòng)端與大屏幕自適應(yīng)適配方案

    關(guān)于移動(dòng)端與大屏幕自適應(yīng)適配方案

    這篇文章主要介紹了關(guān)于移動(dòng)端與大屏幕自適應(yīng)適配方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 詳解vue的Des加密解密

    詳解vue的Des加密解密

    這篇文章主要為大家介紹了vue的Des加密解密使用實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 一文了解Vue實(shí)例掛載的過(guò)程

    一文了解Vue實(shí)例掛載的過(guò)程

    這篇文章主要給大家介紹了關(guān)于Vue實(shí)例掛載的過(guò)程,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03

最新評(píng)論