1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

progress-ring-componentの使い方

Posted at

はじめに

以前に作成したアニメーション付きWeb Component、progress-ring-componentの使い方についての説明です。

どんなコンポーネントなのか

progress-ring-componentStencilでビルドされたアニメーション付きのリング状のWeb Component。指定されたパーセント値に達するまでスムーズに形状が変化します。また色や大きさ、太さなど自由にカスタマイズする事ができ、ダッシュボード等のUIに便利かと思います。内部でeasing-animation-framesという軽量のアニメーションライブラリを使用していて、コンポーネント自体も軽量です。

CDNのjsファイルを<head>に読み込ませ、あとはhtmlファイル内で<progress-ring-component>タグを記述するだけOKです。React等のプロジェクト内でも使用可能です(後に説明)。

使用例 1

まずはシンプルな使用例です。

<progress-ring percentage="30"></progress-ring>
<progress-ring percentage="60" round-linecap="true"></progress-ring>
<progress-ring percentage="90" disable-digits="true">
  <p class="completed-count">9/10<br />Complete</p>
</progress-ring>

demo-1.gif

デモ1

使用例 2

次にクリックイベントを含んだ例です。

<progress-ring percentage="10"></progress-ring>

<div class="buttons">
  <button id="buttonOne">30%</button>
  <button id="buttonTwo">60%</button>
  <button id="buttonThree">90%</button>
</div>

<script>
  const ring = document.querySelector("progress-ring");
  const buttonOne = document.querySelector("#buttonOne");
  const buttonTwo = document.querySelector("#buttonTwo");
  const buttonThree = document.querySelector("#buttonThree");

  buttonOne.addEventListener("click", () => {
    ring.setAttribute("percentage", 30);
  });
  buttonTwo.addEventListener("click", () => {
    ring.setAttribute("percentage", 60);
  });
  buttonThree.addEventListener("click", () => {
    ring.setAttribute("percentage", 90);
  });
</script>

demo-2.gif

デモ2

使用例 3

アニメーション終了後にコールバック関数を呼び出すなども可能です(実装はデモのソースコードを見て頂ければと)。

demo-3.gif

デモ3

プロパティの説明

必須のプロパティはpercentageのみで、その他は値を指定しない場合はデフォルト値が使用されます。

プロパティ名 説明
percentage パーセント値(必須)
radius リングの半径(デフォルトは80
stroke-width リングの太さ(デフォルトは10
round-linecap ラインキャップ(線端)を丸くするか(デフォルトはfalse
duration アニメーションのms時間(デフォルトは4000
easing-type アニメーションのイージング(デフォルトはquartInOut
int-size 整数値のフォントサイズ(デフォルトは30
decimal-size 小数点以下のフォントサイズ(デフォルトはintSize * 0.7
disable-digits パーセント値を非表示にする(デフォルトはfalse
disable-decimals 小数点以下を非表示にする(デフォルトはfalse
colors パーセント値とリングの色(デフォルトは'[[0,"#ff4f40"],[25, "#ffcd40"],[50, "#66a0ff"],[75, "#30bf7a"]]'
invert-colors 逆パターンの色を使用するか(デフォルトはfalse
event-id コールバック関数で使用するイベントID(デフォルトはundefined

セットアップ方法

htmlファイルの<head> タグ内に <script type="module" src="https://unpkg.com/progress-ring-component/dist/progressring/progressring.esm.js"></script>を指定。

<!DOCTYPE html>
<html>
  <head>
    <script
      type="module"
      src="https://unpkg.com/progress-ring-component@1.0.36/dist/progressring/progressring.esm.js"
    ></script>
  </head>
  <body>
    <progress-ring percentage="50"></progress-ring>
  </body>
</html>

Typescriptを使用している場合は型定義の追加が必要な場合があります。以下、Reactコンポーネントの例です。

// App.tsx

import { JSX as LocalJSX } from "progress-ring-component/loader";
import { HTMLAttributes } from "react";

type StencilToReact<T> = {
  [P in keyof T]?: T[P] &
    Omit<HTMLAttributes<Element>, "className"> & {
      class?: string;
    };
};

declare global {
  export namespace JSX {
    interface IntrinsicElements
      extends StencilToReact<LocalJSX.IntrinsicElements> {}
  }
}

function App() {
  return (
    <div>
      <progress-ring percentage={30}></progress-ring>
    </div>
  );
}

export default App;

まとめ

シンプルで使いやすいコンポーネントだと思います。もし使用されることがあればフィードバックを頂けると幸いです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?