技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運營

贊助商

分類目錄

贊助商

最新文章

搜索

CSS+JS實現(xiàn)的下載按鈕動畫(滾動數(shù)字+進(jìn)度條動畫)

作者:admin    時間:2023-4-11 21:41:35    瀏覽:

當(dāng)點擊下載按鈕時,如果想在下載過程中,顯示一下進(jìn)程動畫,或許本文介紹的實例會滿足要求。

效果如圖

 

demodownload

實例介紹

本實例的按鈕由CSS創(chuàng)建,需要JavaScript實現(xiàn)交互。當(dāng)點擊“Download”按鈕時,按鈕里顯示從0%到100%的向上滾動數(shù)字,同時按鈕底部出現(xiàn)一條從左向右延長的進(jìn)度條,按鈕左側(cè)是一個下載動畫圖標(biāo)。

HTML代碼

該實例的HTML代碼較多,不過結(jié)構(gòu)還是很清晰的。

下載按鈕是一個div,外部為一個a標(biāo)簽,其class值為dl-button。

class="icon"div是一個圖標(biāo)容器,該下載圖標(biāo)是用SVG畫出。

class="counter"div是滾動百分比容器。

class="progress"div是進(jìn)度條動畫容器。

<a class="dl-button" href="">
  <div>
    <div class="icon">
      <div>
        <svg class="arrow" viewBox="0 0 20 18" fill="currentColor">
          <polygon points="8 0 12 0 12 9 15 9 10 14 5 9 8 9"></polygon>
        </svg>
        <svg class="shape" viewBox="0 0 20 18" fill="currentColor">
          <path d="M4.82668561,0 L15.1733144,0 C16.0590479,...,0 4.82668561,0 Z"></path>
        </svg>
      </div><span></span>
    </div>
    <div class="label">
      <div class="show default"> Download</div>
      <div class="state">
        <div class="counter">
          <ul>
            <li></li>
            <li>1</li>
          </ul>
          <ul>
            <li>0</li>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
            <li>9</li>
            <li>0</li>
          </ul>
          <ul>
            <li>0</li>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
            <li>9</li>
            <li>0</li>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
            <li>9</li>
            <li>0</li>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
            <li>9</li>
            <li>0</li>
          </ul><span>%</span>
        </div><span>Done</span>
      </div>
    </div>
    <div class="progress"></div>
  </div>
</a>

CSS代碼

該實例按鈕由CSS創(chuàng)建,包含幾個主要的類。

.dl-button設(shè)置下載按鈕的樣式。

 

.dl-button {
  --duration: 4000;
  --success: #16BF78;
  --grey-light: #99A3BA;
  --grey: #6C7486;
  --grey-dark: #3F4656;
  --light: #CDD9ED;
  --shadow: rgba(18, 22, 33, .6);
  --shadow-dark: rgba(18, 22, 33, .85);
  display: block;
  text-decoration: none;
  perspective: 500px;
}

div .icon設(shè)置下載圖標(biāo)的樣式。

 

.dl-button > div .icon {
  --color: var(--grey);
  margin-right: 12px;
  position: relative;
  transform: translateZ(8px);
}
.dl-button > div .icon div {
  overflow: hidden;
  position: relative;
  width: 20px;
  height: 22px;
}
.dl-button > div .icon div:before, .dl-button > div .icon div:after {
  content: "";
  position: absolute;
  width: 2px;
  height: 2px;
  top: 2px;
  transition: opacity 0.3s ease;
}

div .label設(shè)置按鈕狀態(tài)(文字)的樣式。

 

.dl-button > div .label {
  --color: var(--grey-dark);
  line-height: 22px;
  font-size: 16px;
  font-weight: 500;
  color: var(--color);
  position: relative;
  transition: color 0.4s ease;
  transform: translateZ(8px);
}
.dl-button > div .label > div {
  display: flex;
  transition: opacity 0.25s ease;
}
.dl-button > div .label > div:not(.show) {
  position: absolute;
  left: 0;
  top: 0;
  opacity: 0;
}
.dl-button > div .label > div.hide {
  opacity: 0;
}

此外,div .counter設(shè)置滾動百分比數(shù)字的樣式,div .progress設(shè)置進(jìn)度條的樣式,相應(yīng)CSS代碼可在效果演示窗口或下載源碼包里查看。

JavaScript

本實例點擊按鈕的動畫交互使用JavaScript來實現(xiàn),代碼如下:

$('.dl-button').on('click', e => {

  let btn = $(e.currentTarget),
  label = btn.find('.label'),
  counter = label.find('.counter');

  if (!btn.hasClass('active') && !btn.hasClass('done')) {

    btn.addClass('active');

    setLabel(label, label.find('.default'), label.find('.state'));

    setTimeout(() => {
      counter.addClass('hide');
      counter.animate({
        width: 0 },
      400, function () {
        label.width(label.find('.state > span').width());
        counter.removeAttr('style');
      });
      btn.removeClass('active').addClass('done');
    }, getComputedStyle(btn[0]).getPropertyValue('--duration'));

  }

  return false;

});

function setLabel(div, oldD, newD, callback) {
  oldD.addClass('hide');
  div.animate({
    width: newD.outerWidth() },
  200, function () {
    oldD.removeClass('show hide');
    newD.addClass('show');
    div.removeAttr('style');
    if (typeof callback === 'function') {
      callback();
    }
  });
}

總結(jié)

本文介紹了如何使用CSS+JS實現(xiàn)下載按鈕的動畫效果,該下載動畫包含三個部分:下載圖標(biāo)動畫,滾動的數(shù)字和進(jìn)度條動畫。如果你喜歡這個效果,可直接下載源碼使用。

相關(guān)文章

x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */