ローディングアニメーション実装(メモ)
TOC
SWELLの画面内で編集する方法
SWELLの外観→ウィジット→ヘッダー内部
以下のコードをカスタムHTMLウィジットに貼り付け
<!-- ローディング画面 -->
<div id="loading">
<div class="spinner"></div>
</div>
追加css
/* Loading Block */
#loading {
width: 100vw;
height: 100vh;
transition: all 1s;
background-color: rgba(255 255 255 / 95%);
position: fixed;
top: 0;
left: 0;
z-index: 9999;
}
.spinner {
width: 40px;
height: 40px;
background-color: var(--color_main);
margin: 25% auto;
-webkit-animation: sk-rotateplane 1.2s infinite ease-in-out;
animation: sk-rotateplane 1.2s infinite ease-in-out;
}
/* Loading Animation */
@-webkit-keyframes sk-rotateplane {
0% {
-webkit-transform: perspective(120px)
}
50% {
-webkit-transform: perspective(120px) rotateY(180deg)
}
100% {
-webkit-transform: perspective(120px) rotateY(180deg) rotateX(180deg)
}
}
@keyframes sk-rotateplane {
0% {
transform: perspective(120px) rotateX(0deg) rotateY(0deg);
-webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg)
}
50% {
transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
-webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg)
}
100% {
transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
-webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
}
}
/* Hide Loading Block */
.loaded {
opacity: 0;
visibility: hidden;
}
外観→カスタマイズ→高度な設定
ローディング画面を消すJavaScriptを貼り付け
<script>
window.onload = function() {
const spinner = document.getElementById('loading');
// Add .loaded to .loading
spinner.classList.add('loaded');
}
</script>
header.phpに追記する方法
子テーマにheader.phpをコピーし、以下のスクリプトを貼り付け
<!--ローディング アニメーション(トップページのみ読み込み) -->
<?php if ( is_home() || is_front_page() ) : ?>
<div id="loader_wrap">
<div class="loader">
<div class="loader-rotate"></div>
</div>
</div>
<script>
var flg = null;
var check_access = function () {
// sessionStorageの値を判定
if (sessionStorage.getItem('access_flg')) {
// 2回目以降
flg = 1;
} else {
// 1回目
sessionStorage.setItem('access_flg', true);
flg = 0
}
return flg;
}
var $i = check_access();
const loader = document.getElementById("loader_wrap");
if($i == 0){
// 1回目アクセスの処理
// 3秒後にopacityを「0」にする
setTimeout(() => {
loader.style.opacity = 0;
}, 3000);
// アニメーション終了後に要素を取り除く
loader.addEventListener("transitionend", () => {
loader.remove();
});
}else{
// 2回目アクセスの処理
// 読み込ませないようにすぐ要素を取り除く
loader.remove("loader_wrap");
}
</script>
<?php endif; ?>
<!--ローディング アニメーション(トップページのみ読み込み) -->
追加css
/************************************
ローディングアニメーション
************************************/
/* 画面全体 */
#loader_wrap {
z-index: 999;
position: fixed;
display: flex;
align-items: center;
justify-content: center;
width: 100vw;
height: 100vh;
top: 0;
background: rgba(255 255 255 / 85%);;
pointer-events: none;
transition: all 0.4s;
}
/* ぐるぐる */
.loader-rotate {
width: 40px;
height: 40px;
margin: 0 auto;
border-radius: 50%;
border: solid 4px;
border-color: #808080 #00000010 #00000010;
position: relative;
animation: spin 1s infinite linear;
}
/* ************************************
************************************ */