CSSとJavaScriptで別の画面をスライドイン、スライドダウンさせるサンプル
Webアプリで画面遷移をさせることなく、ネイティブアプリのように画面切り替えをしたいと思ったので、実験的に作ってみました。
中央のボタンを押すと別の画面が下からズズッと出てきます。
See the Pen 画面いっぱいのスクリーンがスライドインするサンプル by Makoto Ohnami (@zohnami) on CodePen.
とりあえず、HTMLはこのようにcover_screen
として上から被せる画面を置いておきます。
このままだと、container
の中にcover_screen
が入ってしまうのでcssを調整しましょう。
<div class="container">
<div class="button slide_up_button">
common!!
</div>
<div class="cover_screen">
<div class="button slide_down_button">
close!!
</div>
</div>
</div>
ポイントはposition: absolute;
とtop:100%;
の部分です。
positionをabsoluteとすることで位置を絶対指定にし、topを画面の100%だけずらすことでスクリーンがブラウザ画面の真下に潜んでいる状態にしておきます。
.cover_screen {
position: absolute;
top: 100%;
left: 0;
background-color: #f6ad49;
width: 100%;
height: 100vh;
display: grid;
place-content: center;
}
あとはアニメーションのcssを作っておきます。
以下のようにアニメーションの進捗に応じてtopの状態をゼロに近づけていきます。
今回は0%
と100%
だけを指定していますが、途中の状態を細かく指定すると動きに緩急をつけたりできると思います。
@keyframes slide_up {
0% {
top: 100%;
}
100% {
top: 0;
}
}
.animation_slide_up {
animation-name: slide_up;
animation-duration: 0.6s;
animation-timing-function: ease-in-out;
animation-fill-mode: forwards;
}
あとは、ボタンのクリックに応じてcssのアニメーションクラスを追加したり削除したりするコードをJavaScriptとして書いていきます。
開閉を繰り返すと、不要なクラスが残ってしまうのでremove
で取り除くこともやっています。
const slideUpButton = document.querySelector('.slide_up_button')
slideUpButton.addEventListener('click', () => {
const coverScreen = document.querySelector('.cover_screen')
coverScreen.classList.remove('animation_slide_down')
coverScreen.classList.add('animation_slide_up')
})
コードの全体像はCodePenのサンプルをご覧ください。
SPAのようなことをしたくて、こんな感じの演出が必要になりました。
完成したらこのブログでもお知らせしようと思います。
この記事の環境情報
- HTML, CSS, JavaScript
- つま先を大事に
JavaScriptに関する他の記事を読む
- タグマネージャーでjsのloadイベントを発火させたいとき
- [JavaScriptをわかりやすく]removeメソッドで自身を動的に削除する
- [JavaScriptをわかりやすく]子要素をremoveChildで動的に削除する
- [JavaScriptをわかりやすく]insertAdjacentHTMLでタグを直接追加する
- [JavaScriptをわかりやすく]beforeとafterで指定した要素の前後に動的に要素を追加する
htmlに関する他の記事を読む
- [JavaScript]親要素の表示領域でクリックしているかを判定する方法
- 続・cssの一箇所を変更してテーマ全体を入れ替える
- cssの一箇所を変更してテーマ全体を入れ替えるサンプル
- [CSS]背景色を点滅させるアニメーションサンプル
- クリックしたときにCSSで線を引くサンプル
cssに関する他の記事を読む
- [JavaScript]親要素の表示領域でクリックしているかを判定する方法
- nth-childの疑似要素で3番目以降にスタイルを全適用する
- 続・cssの一箇所を変更してテーマ全体を入れ替える
- cssの一箇所を変更してテーマ全体を入れ替えるサンプル
- [CSS]背景色を点滅させるアニメーションサンプル
最近の記事を読む
- Flutterでcontextを使わずにlocale情報を取得する
- Cloud RunでIAPを有効にしようとしてハマったこと
- slimでtype='application/ld+json'のscriptタグを書く
- タグマネージャーでjsのloadイベントを発火させたいとき
- mysqlコマンドを実行してERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)と言われたら