映画館の宣伝のような文字が順番に出てくるやつを作る
どうも7noteです。映画館で最初に流れる予告編のようなテキストを順番に出す処理を実装してみる
javascriptを使いpromise
で順番にjavascriptを処理していくことで表現できています。
テキストをpタグに用意して、それらを順番に表示しています。
それではソースをどうぞ。
※jQueryを使用しています。jQueryてなにそれおいしいの?という方はこちら
ソース
<p id="text01">あの名作が再び帰ってくる</p>
<p id="text02">全世界を熱狂の渦に巻き込んだ<br>あの感動作が</p>
<p id="text03">劇場版になって再び旋風を巻き起こす</p>
body {
background: #000;
display: flex;
align-items: center;
justify-content: center;
}
p {
color: #fff;
font-size: 30px;
font-weight: bold;
display: none;
}
function action() {
return new Promise(resolve => {
setTimeout(() => {
resolve()
}, 3000) //3秒後に実行
})
}
action()
.then(function(){
$("#text01").show(); // テキスト1を表示
setTimeout(() => {
$("#text01").fadeOut()
}, 1500) //フェードアウトを1.5秒後に実行
return action()
})
.then(function(){
$("#text02").show(); // テキスト2を表示
setTimeout(() => {
$("#text02").fadeOut()
}, 1500) //フェードアウトを1.5秒後に実行
return action()
})
.then(function(){
$("#text03").show(); // テキスト3を表示
setTimeout(() => {
$("#text03").fadeOut()
}, 1500) //フェードアウトを1.5秒後に実行
return action()
})
解説
正直解説できるほどpromise
については詳しくないのですが、action()
という関数を作って、この関数を通ってから次の命令を動かすみたいな流れになっています。
そのため、action()
の中で3秒処理を停止させてから、resolve()
を実行して次の命令に以降する許可を出しているみたいな感じだと思います。(※間違っていたらすみません)
下の方でthen()
を複数かいていますが、このような書き方をすることで処理をこの順番の通りに実行できます。
最初は1のテキストを表示して1.5秒後にフェードアウト。次は2のテキストを・・・のように順番に処理を書いています。
まとめ
全く非同期処理について知らないときに似たようなことをsetTimeOutでやろうとして挫折したことがあります。
他にも面白いことに使えそうですね。
※思いつきでやってみたのですが、ソースに無駄な部分があるかもしれません。ご指摘改善等コメントお願いします。
おそまつ!
~ Qiitaで毎日投稿中!! ~
【初心者向け】WEB制作のちょいテク詰め合わせ
Author And Source
この問題について(映画館の宣伝のような文字が順番に出てくるやつを作る), 我々は、より多くの情報をここで見つけました https://qiita.com/7note/items/ad51ed64e551a1c235fc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .