2020.09.09

svg

svgロードアニメーションの実装【円を一周】

デモページはこちら

円を一周する動作のsvgロードアニメーションを実装します。画像読み込みの管理ができるJavaScriptライブラリ、imagesLoaded(imagesloaded.pkgd.js)を利用しています。

svgタグで表示エリアをwidth="90"、height="90"で設定します。また描画エリアをviewBox="0 0 90 90"(X座標:0、Y座標:0、width:90px、height:90px)で設定して、表示エリアとぴったり重ねます。

円はcircleタグではなくrectタグで記述します。y="5"、x="5"の位置にwidth="80"、height="80"の正方形を角丸rx="40"、ry="40"で設定して円にします。rectタグは正方形の一辺の半分以上の数値をrxとry両方に設定すれば円になります。

同じ大きさのrectタグを2つ重ね、クラス名を設定します。1つ目のクラス名p-loader-circle-parts-bgが背景用、2つ目のクラス名p-loader-circle-partsがロードアニメーション用です。

<svg class="p-loader-circle js-loader-circle" xmlns="http://www.w3.org/2000/svg" width="90" height="90" viewBox="0 0 90 90">
	<rect class="p-loader-circle-parts-bg" y="5" x="5" width="80" height="80" rx="40" ry="40"></rect>
	<rect class="p-loader-circle-parts js-loader-circle-parts" y="5" x="5" width="80" height="80" rx="40" ry="40"></rect>
</svg>

それぞれのrectタグの塗り、線の色、線の太さ、破線の間隔、破線の開始位置はCSSで記述します。背景用の破線の間隔は500で実際の線より長く、破線の開始位置は0のため見た目は通常の円で描画されます。ロードアニメーション用の破線の間隔は同様に500ですが、破線の開始位置は500のため見た目は非表示になります。このロードアニメーション用の破線の開始位置を、画像の読み込みに合わせてJavaScriptで500から0へ変化させて円を一周する動作を実現します。

.p-loader-circle {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate3d(-50%, -50%, 0);
	transform-origin: top left;
}
.p-loader-circle-parts {
	transition: stroke-dashoffset 10s cubic-bezier(0.075, 0.82, 0.165, 1),
	transform 0.5s cubic-bezier(0.075, 0.82, 0.165, 1),
	opacity 0.5s cubic-bezier(0.075, 0.82, 0.165, 1);
	fill: transparent;
	stroke: #fff;
	stroke-width: 2px;
	stroke-dasharray: 500;
	stroke-dashoffset: 500;
}
.p-loader-circle-parts-bg {
	transition: transform 0.5s cubic-bezier(0.075, 0.82, 0.165, 1),
	opacity 0.5s cubic-bezier(0.075, 0.82, 0.165, 1);
	fill: transparent;
	stroke: #70709c;
	stroke-width: 2px;
	stroke-dasharray: 500;
	stroke-dashoffset: 0;
}

関連記事

2021.10.06

svg

svgコード記述時の注意点

svgコード記述時の注意点をまとめます。 ■ svgコードの最適化にツールを利用 SVGの不要なコードを取り除いて最適化してくれるツールとして、ブラウザで利用で…

2020.10.21

svg

svgロードアニメーションをCSSアニメーションで実装【グラデーションの線を回転】

デモページはこちら グラデーションの線を回転する動作のsvgロードアニメーションを、CSSアニメーションで実装します。 svgタグで表示エリアをwidth="6…

2024.09.15

svg

svgのclipPathを利用した画像の切り抜き

svgのclipPathを利用して画像を切り抜きます。svgの書き方は数パターンあります。デモページはこちら まず同一のsvg内にclipPathを記述し、us…

2020.10.05

svg

svgロードアニメーションをSMILで実装【グラデーションの線を回転】

デモページはこちら グラデーションの線を回転する動作のsvgロードアニメーションを、XMLベースの言語SMILで実装します。画像読み込みの管理ができるJavaS…

上に戻る