2020.10.21

svg

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

デモページはこちら

グラデーションの線を回転する動作のsvgロードアニメーションを、CSSアニメーションで実装します。

svgタグで表示エリアをwidth="60"、height="60"で設定します。線が回転するエリアになります。描画エリアはviewBox="0 0 38 38"(X座標:0、Y座標:0、width:38px、height:38px)で設定します。円の4分の1+余白を描画したエリアです。

グラデーションはdefs内にlinearGradientで設定し、id="a"を指定しておきます。pathのstrokeでurl(#a)のようにlinearGradientのidを指定すると線にグラデーションが適用されます。

circleはr="1"(半径1px)で設定し、pathにつなげて丸みを持たせています。

<body data-status="loading">
<div class="p-loader">
	<svg class="p-loader-circle" xmlns="http://www.w3.org/2000/svg" width="60" height="60" viewBox="0 0 38 38">
		<defs>
			<linearGradient x1="8.042%" y1="0%" x2="65.682%" y2="23.865%" id="a">
				<stop stop-color="#3bbbff" stop-opacity="0" offset="0%"/>
				<stop stop-color="#3bbbff" stop-opacity=".631" offset="63.146%"/>
				<stop stop-color="#3bbbff" offset="100%"/>
			</linearGradient>
		</defs>
		<g fill="none" fill-rule="evenodd">
			<g transform="translate(1 1)">
				<path d="M36 18c0-9.94-8.06-18-18-18" stroke="url(#a)" stroke-width="2"></path>
				<circle fill="#3bbbff" cx="36" cy="18" r="1"></circle>
			</g>
		</g>
	</svg>
</div>

グラデーションの線を回転する動作はCSSで記述しています。bodyタグのdata-status属性がloadingの間はローディングを表示します。svgはCSSアニメーションでtransformプロパティのrotateを0から360degへ変化させて回転させます。bodyタグはoverflow: hidden;を指定してスクロールバーを非表示にします。
ローディング終了時は、オーバーレイをopacityを1から0へtransitionで変化させます。また、pointer-eventsをautoからnoneへ変化させます。ローディング中はpointer-eventsがnoneだと背面に隠れているコンテンツが選択できてしまいます。ローディング終了後はpointer-eventsがautoだとコンテンツが選択できません。displayプロパティをblockからnoneへ変更することなく、オーバーレイのフェードアウトを実現しています。

body[data-status="loading"] {
	overflow: hidden;
}
body[data-status="loading"] .p-loader {
	pointer-events: auto;
	opacity: 1;
}
.p-loader {
	position: fixed;
	z-index: 10000;
	width: 100vw;
	height: 100vh;
	background: #fff;
	pointer-events: none;
	opacity: 0;
	transition: opacity .3s;
}
body[data-status="loading"] .p-loader-circle {
	animation: loading .6s linear infinite;
}
@keyframes loading {
	0% {
		transform: translate(-50%, -50%) rotate(0);
	}
	100% {
		transform: translate(-50%, -50%) rotate(360deg);
	}
}
.p-loader-circle {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate3d(-50%, -50%, 0);
}

JavaScriptのコードです。デモページの読み込みが速いため、setTimeoutで10秒後にローディングを終了しています。

$(window).on('load',function(){
	setTimeout(function() {
		$('body').attr('data-status', 'loaded');
	}, 10000);
});

関連記事

2024.09.15

svg

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

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

2020.10.05

svg

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

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

2021.10.06

svg

svgコード記述時の注意点

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

2020.09.09

svg

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

デモページはこちら 円を一周する動作のsvgロードアニメーションを実装します。画像読み込みの管理ができるJavaScriptライブラリ、imagesLoaded…

上に戻る