LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

【WEB開發】前端 button 組件之按鈕式進度條

admin
2025年7月21日 7:58 本文熱度 795

作者:_island

https://juejin.cn/post/6992141459977682951

前言

在一些前端項目中,它們會涉及文件的上傳 / 下載 功能,當文件在進行上傳 / 下載時,我們該怎么更好的向用戶進行進度反饋呢?我們常見的有彈窗式進度條、吸頂式進度條 ...

本篇章將給大家帶來按鈕式進度條,并手把手帶領大家一步步的從零手寫按鈕式進度條 ?????

話不多說,先看看成品再碼

實現效果

1.gif

原理

創建一個div作為按鈕的總體,在按鈕里邊放入3div,分別是進度條元素,圖標元素,文本元素,我們將按鈕設置為相對定位,將進度條元素設置為絕對定位,利用topleft值來控制進度條,讓我們用碼實現!

2.png

用碼實現

碼出基本樣式
<div class="button">
    <span class="text">download</span>
</div>
復制代碼
 .button {
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
        position: relative;
        display: flex;
        align-items: center;
        justify-content: center;
        width160px;
        height40px;
        color: black;
        background: white;
        border-radius10px;
        margin015px;
        font-size18px;
        text-decoration: none;
        overflow: hidden;
    }
復制代碼

3.png

很快,我們按鈕的基本樣式已經寫出來了,接下來我們先實現進度條效果,在.button元素下創建一個span標簽,并綁定上一個progress類名作為進度條元素。這里不能使用偽元素,因為后續我們需要使用JavaScript來控制按鈕的狀態。而偽元素是不能通過JavaScript被查找到的。

后續我會出一篇關于偽元素的文章 關注我 不迷路 ?? ??

<div class="button">
    <span class="text">download</span>
    <span class="progress"></span>
</div>
復制代碼

把進度條元素的樣式寫上

.progress {
    content'';
    position: absolute;
    top: 90%;
    left: -100%;
    width: 100%;
    height: 100%;
    background: #4776E6
    background: -webkit-linear-gradient(to right, #8E54E9, #4776E6); 
    background: linear-gradient(to right, #8E54E9, #4776E6); 
    transition: all 4s;
  }
復制代碼

我們先把overflowhidden屬性注釋掉,可以看到現在.progress元素位于按鈕元素的左下邊。露出10%的高度顯示在按鈕可見范圍中。后面我們通過JavaScriptAPI來獲取到.progress元素,控制該元素的left值就可以實現進度條效果啦!

4.png

碼出下載效果

我們使用JavaScriptquerySelectorAll方法,獲取.button.progress元素,及.text元素。

const btn = document.querySelectorAll('.button')[0];
const pr = document.querySelectorAll('.progress')[0];
const text = document.querySelectorAll('.text')[0];
復制代碼

.button元素添加點擊事件,當按鈕被點擊時我們將按鈕的left值設置為0,也就是進度100%的效果。

btn.addEventListener('click', () => {
  pr.style.left = '0';
});
復制代碼

5.gif

接下來,我們把按鈕元素的overflow屬性設置為hidden時。

6.gif

到了這里,我們已經完成了進度條效果,但對比效果圖還是差了那么一點點,當進度條到100%之后,我們需要將.progress元素的top值設置為0,把整塊元素上移。在點擊事件后加入以下代碼:

setTimeout(() => {
  pr.style.top = '0';
  pr.style.transitionDuration = '1s';
  text.style.color = 'white';
  text.innerText = 'downloaded';
}, 4000);
復制代碼

另外,在.progress元素上移后它會將我們的.text元素覆蓋上去,為此我們需要將.text的層級提升下。

.text{
        z-index10;
    }
復制代碼

7.gif

引入圖標

HTML中引入 font awesome這個圖標庫。

  <link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/5.15.3/css/all.css" rel="stylesheet">
復制代碼

我們需要用到的圖標分別:

<i class="fa fa-arrow-down" aria-hidden="true"></i>
<i class="fa fa-download" aria-hidden="true"></i>
<i class="fa fa-check" aria-hidden="true"></i>
復制代碼

我們在.button元素中插入這個i標簽,為了圖標不被進度條元素覆蓋,同樣把層級設置為10

<i class="fa fa-arrow-down" aria-hidden="true"></i>
復制代碼
i {
    margin0 8px 0 0;
    font-size16px;
    z-index10;
  }
復制代碼

8.png

給這個圖標設置一個循環動畫,這樣可以用來吸引用戶眼球從而促使去點擊它 。

@keyframes tapDownload {
  0% {
    transformtranslateY(2px);
  }
  100% {
    transformtranslateY(0);
  }
}

.fa-arrow-down{
    animation: tapDownload 1s ease infinite;
}
復制代碼

9.gif

加了這個動效之后,用戶是不是更有點擊欲啦?

動態更換圖標

同樣,我們使用JavaScriptquerySelectorAll方法,獲取icon元素。

const icon = document.querySelectorAll('.fa')[0];
復制代碼

通過對比上面三個圖標元素,我們發現它們都有共同的類名為fa,而不同的是后面fa-*這個類,當按鈕狀態改變時就將對應的類名移除后再添加上新的類名即可,在按鈕的點擊事件中添加以下代碼:

btn.addEventListener('click', () => {
  pr.style.left = '0';
  icon.classList.remove('fa-arrow-down');
  icon.classList.add('fa-download');
  text.innerText = 'downloading';
  setTimeout(() => {
    // 忽略了一些代碼
    icon.style.color = 'white';
    icon.classList.remove('fa-download');
    icon.classList.add('fa-check');
  }, 4000);
});
復制代碼

在下載過程中,我們給下載圖標的fa-download類綁定一個幀動畫。

@keyframes downloading {
  0% {
    transformscale(.7);
  }
  100% {
    transformscale(1);
  }
}

.fa-download {
    animation: downloading 1s ease infinite alternate-reverse;
  }
復制代碼

10.gif

最后

本文帶著大家從零實現到一個進度條按鈕,使用前端三件套HTMLCSSJavaScript進行進度條式按鈕開發。還引入的font awesome庫。希望大家能從中有所收獲,寫出更好更炫酷的動畫效果。


閱讀原文:原文鏈接


該文章在 2025/7/21 10:18:14 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲精品无在线码 | 日本中文字幕免费精品视频 | 亚洲国产精品一区 | 亚洲国产中文精品高清在线 | 日本狂喷奶水在线播放114 | 日韩动漫在线一区二区 |