前提・実現したいこと
HTML,CSS,Javascriptでwebページを作成しています。
仕様としてはスクロールするたびに表示する要素を変えるというものです。
keyframesで透明度を1→0にしてふんわり表示させる演出をしています。
発生している問題・エラーメッセージ
あいうえお→かきくけこ→さしすせそ→かきくけこ→さしすせそ とスクロールすると、さしすせその時点でanimationが効かないです。
該当のソースコード
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <!-- <link rel="stylesheet" href="./css/style.css"> --> </head> <body> <div id="wrapper"> <div class="box show" id="box-1"><span>あいうえお</span></div> <div class="box fade" id="box-2"><span>かきくけこ</span></div> <div class="box fade" id="box-3"><span>さしすせそ</span></div> <div class="box fade" id="box-4"><span>たちつてと</span></div> <div class="box fade" id="box-5"><span>なにぬねの</span></div> </div> </body> </html> <!-- <script src="./js/scrollFunc.js"></script> --> <style> * { padding: 0; margin: 0; box-sizing: border-box; } .box { width: 100vw; height: 100vh; position: relative; } span { position: absolute; font-size: 28px; top: 50%; left: 50%; transform: translateY(-50%) translateX(-50%); } #wrapper { width: 100vw; height: 100vh; overflow: hidden; } #box-1 { background-color: aliceblue; } #box-2 { background-color: antiquewhite; } #box-3 { background-color: aqua; } #box-4 { background-color: aquamarine; } #box-5 { background-color: indianred; } .fade { display: none; } .fade span { animation: show 1s linear 0s; animation-fill-mode: forwards; animation-direction: reverse } .show { display: block; } .show span { animation: show 1s linear 0s; animation-fill-mode: forwards; } @keyframes show { from { opacity: 0; } to { opacity: 1; } } </style> <script> var vox1 = document.getElementById('box-1'); var vox2 = document.getElementById('box-2'); var vox3 = document.getElementById('box-3'); var vox4 = document.getElementById('box-4'); var vox5 = document.getElementById('box-5'); //スクロール上下判別 var count = 0; const wheel = ((flag = false, timerId = null) => event => { clearTimeout(timerId); timerId = setTimeout(() => flag = false, 100); // 1秒空いたらリセット if (flag) return; if (event.wheelDeltaY < 0 && count < 4) { count = count + 1; } else if (event.wheelDeltaY > 0 && count > 0) { count = count - 1; } flag = true; if (count == 0) { vox1.classList.remove('fade'); vox1.classList.add('show'); vox2.classList.remove('show'); vox2.classList.add('fade'); } else if (count == 1) { vox2.classList.remove('fade'); vox2.classList.add('show'); vox1.classList.remove('show'); vox1.classList.add('fade'); } else if (count == 2) { vox3.classList.remove('fade'); vox3.classList.add('show'); vox2.classList.remove('show'); vox2.classList.add('fade'); } else if (count == 3) { vox4.classList.remove('fade'); vox4.classList.add('show'); vox3.classList.remove('show'); vox3.classList.add('fade'); } else if (count == 4) { vox5.classList.remove('fade'); vox5.classList.add('show'); vox4.classList.remove('show'); vox4.classList.add('fade'); } })(); window.addEventListener("wheel", wheel); </script>
試したこと
上記
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。