【CSS】【Javascript】SVGでつくった円で、一分カウンターを作る方法
SVGで3つの円をつくる
3つの円が重なっている状態
<div class="progressCircle">
<svg viewBox="0 0 100 100">
//一番後ろの円
<circle cx="50" cy="50" r="50" class="base" />
//真ん中の変化する円
<circle cx="50" cy="50" r="25" class="circle" />
//手前の秒数が表示される円
<circle cx="50" cy="50" r="38" class="front" />
</svg>
<div class="seconds"> //秒数を表示するところ
<span class="second"></span>
</div>
</div>
CSS
.progressCircle{
height: 100px;
width: 100px;
display: block;
position: relative;
margin-bottom:10px;
}
svg {
display: block;
height: 100%;
width: 100%;
position: absolute;
transform: rotate(-90deg);
top: 0;
left: 0;
overflow: visible;
}
.circle {
fill: rgba(0,0,0,0);
stroke-width: 50;
stroke-dasharray: 0,157;
position: relative;
}
.seconds{ //秒数を表示させるところ
font-size:38px;
font-weight: bold;
color:#fff;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
CSSでアニメーションさせる
.pie {
stroke: blue;
webkit-animation-name: pie;
//*注)あとでJavascriptで書き換えます
animation: pie 120s linear;
}
.front{
fill: #333;
}
@-webkit-keyframes pie {
50%,100% { stroke-dasharray: 157,157,0,0;}
}
@keyframes pie {
50%,100% { stroke-dasharray: 157,157,0,0;}
}
javascriptでカウントダウンを表示させる
function timer(){
var setTime = 60; //60秒に設定
var second = 0;
const circle = document.querySelector(".circle");
const seconds = document.querySelector(".second");
circle.classList.add('pie');
//先ほどのアニメーションを書き換えてください
circle.style.animation = 'pie '+ setTime*2 +'s linear';
var timerId = setInterval(function() {
second += 1;
if(second >= setTime){
clearInterval(timerId);
}
countTime = setTime - second;
seconds.textContent= (countTime % 60);
if(countTime < 10){ //10秒切ったら文字が赤くなります
document.querySelector(".seconds").style.color = 'red';
};
}, 1000);
}
timer();

以上、SVGでつくった円をアニメーションさせた、1分カウンターをつくる方法について紹介しました。クイズアプリ等で使ってみてください。
こんな記事も読まれています。
-
【HTML】【CSS】【javascript】電卓の作り方
電卓のソースコードを2つ紹介します。javascriptはわずか数行で書けます。
-
【JacvaScript】【CSS】たった4行のJavaScriptでできるハンバーガーメニューの作り方
たった4行のJavaScriptで作るハンバーガーメニューの作り方について紹介します。✖をつくるには、transform-originがポイントです。
- リンク
-
波紋エフェクトを表現するjqueryのripples-min.jsの使い方
jqueryのripples-min.jsを使うと簡単に水面の波紋を表現できます。波紋の広がりの速度、波紋の大きさ、波紋のブレの値を変えていろいろ表現させると面白いです。
-
【Javascript】querySelectorAllで要素を取得し、クリックしたら、クラスを追加したり、削除したりする方法。
JavascriptのquerySelectorAllで要素を取得し、クリックしたら、クラスを追加したり、削除したりする方法について解説します。querySelectorと同じように書いてしまうとエラーがでます。forEachを使うとすべてに適用できます。
- リンク
-
要素の高さを取得する方法。getBoundingClientRectとは?window.innerHeightとは?window.pageYOffsetとは?
要素の高さを取得する方法について解説します。getBoundingClientRect、window.innerHeight、window.pageYOffsetについて理解し、要素がいつ画面に現れるかを把握できるようにしましょう。
-
Javascriptを使ったページネーションの実装
トップページの記事が増えてきたので、何とかページネーションで最新の記事だけを表示できないかと思っていたら、いい記事を発見しました。カスタマイズして実装することができました。
- リンク
-
【Javascript】マウスの指す(X, Y)座標とドラッグ & ドロップを理解する
マウスの指す(X, Y)座標とドラッグ & ドロップについて解説します。mousedown, mouseover, mousemove, mouseupを使います。
-
【javascript】連想配列をテーブルできれいに表示する方法
javascript(Object.entries)を使って、連想配列の中身をテーブルできれいに表示する方法について紹介します。
- リンク