Quantcast
Channel: CSSタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8818

忘年会のために作った昔のテレビみたいに画面遷移するJavaScript

$
0
0

僭越ながら、エヌシーアイ総合システム Advent Calendar 2019 20日目を担当させていただきます。
(投稿が1月中旬になってしまった…)
忘年会のために作ったJavaScriptについて書きます。
ちなみに全体が完成したのは忘年会前日深夜3時でした。

どんな感じで画面遷移するの?

ezgif.com-crop.gif

こんな感じで動きます。
遷移前と遷移後で同じページのように見えますが、別のページに飛んでいます
今や見る影もないブラウン管テレビってこんな感じだった気がします。

大まかな中身としては
 フェードアウトのアニメーション
 ページ移動
 フェードインのアニメーション

の流れになります。

フェードインのアニメーション

順番が逆になりますが、まずフェードインからです。
こちらはCSSだけで作りました。

style.css
body{animation:animate_in1sease;}@keyframesanimate_in{0%{transform:scale(0.2,0.01);opacity:0;}70%{transform:scale(1,0.01);opacity:1;}100%{transform:scale(1,1);}}

@keyframesを使って動きを処理しています。
画面サイズと透明度を変えてそれっぽく見せています

フェードアウトのアニメーション

こちらが本題です。
リンクが押されるとアニメーションが起動するようにJavaScriptを書きます。
またアニメーション終了までページ移動を止める必要があります。

style.css
.animate_content{animation:animate_out1sease;}@keyframesanimate_out{30%{transform:scale(1,0.01);}70%{transform:scale(0.2,0.01);opacity:1;}100%{transform:scale(0.2,0.01);opacity:0;}}
page_transition.js
$(function(){$('a:not([href^="#"]):not([target])').on('click',function(e){// ページ移動を止めてURLを取得e.preventDefault();url=$(this).attr('href');// クラスを追加$('body').addClass('animate_content');// 980ms経ったらページ移動setTimeout(function(){window.location=url;},980);returnfalse;});});

アニメーションの1s(1000ms)が終わるまでにページ移動しないといけないので、980msで移動させています。
追加するクラス / 追加される属性 を簡単に指定できるので応用は効きそうな気がしますね。

終わりに

学生時代はJavaScriptを避けてきたので勉強しないとですね。


Viewing all articles
Browse latest Browse all 8818

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>