質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

2560閲覧

javascriptで1文字ずつ表示させ、文字列全体の表示が完了したら次の文字列が表示(または指定先へリンク)する方法

tiegr_0196

総合スコア13

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/01/17 10:14

javascriptで1文字ずつ表示させ、文字列全体の表示が完了したら
アイコンのようなものがタップできるようにし、次の文字列が表示(または指定先へリンク)されるようなものを考えております。イメージはスマートフォンゲームによくあるチュートリアルのイメージです。

以下のコードで1文字ずつ表示はできましたが、
表示完了後に次の文字列を表示させるためにタップ出来るようにする方法が分かりません。
よろしくお願いします。

<script type="text/javascript"> var speed = 200;//表示スピード var index = 0;//表示する文字のindex var words; //表示する文字列 var read; window.onload = function(){ read = document.getElementById("read"); words = read.innerHTML; read.innerHTML = ""; read.style.display = "block"; for (var i = 0; i < words.length; i++){ setTimeout(readWord, speed * (i+1)); } } function readWord(){ if(words == null || words.length == 0){ return ; } if(words.charAt(index).match(/(\n|\r|\r\n)/g)){ read.innerHTML += "&ltbr />"; }else{ read.innerHTML += words.charAt(index); } ++index; } </script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/01/17 10:38

jsだけではなく、htmlの全体を掲載してください。
kei344

2017/01/17 19:19

質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
tiegr_0196

2017/01/18 00:41

回答、ご指導ありがとうございました。
guest

回答2

0

ベストアンサー

HTML

1<p id="text" data-text="[&quot;Hello, World!&quot;,&quot;Hello, DOM!&quot;,&quot;Hello, JavaScript!&quot;]" data-textindex="-1"></p> 2<input id="next" type="button" value="next" hidden /> 3<script> 4'use strict'; 5document.getElementById('next').addEventListener('click', { 6 textElement: document.getElementById('text'), 7 viewText: function viewText () { 8 setTimeout(function handleTimeout (element) { 9 var textList = JSON.parse(element.getAttribute('data-text')), 10 listIndex = +element.getAttribute('data-textindex'), 11 text = element.textContent, 12 originalText = textList[listIndex], 13 textLen = text.length + 1; 14 15 element.textContent = originalText.slice(0, textLen); 16 17 if (originalText.length > textLen) { 18 setTimeout(handleTimeout, 200, element); 19 } else { 20 this.document.getElementById('next').hidden = false; 21 } 22 }, 200, this.textElement); 23 }, 24 handleEvent: function handleClick (event) { 25 var element = this.textElement, 26 textList = JSON.parse(element.getAttribute('data-text')); 27 28 element.setAttribute('data-textindex', (+element.getAttribute('data-textindex') + 1) % textList.length); 29 element.textContent = ''; 30 this.viewText(); 31 } 32}, false); 33document.getElementById('next').click(); 34</script>

Re: tiegr_0196 さん

投稿2017/01/17 11:45

think49

総合スコア18164

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiegr_0196

2017/01/18 00:41

回答ありがとうございました。
tiegr_0196

2017/01/24 01:12

think49さま 先日は上記ご回答大変ありがとうございました。 失礼ながら追加ご教授をいただけませんでしょうか? 以下構文で、&quot;&quot;間に表示された文字が表示され終わったら次へボタンが表示され次の&quot;&quot;のテキストが表示されるのはそのままで、最後の文章が表示された際(下の例であれば「Hello, JavaScript!」)のみ、別のページへのリンクを追記させる仕様にすることはできるものでしょうか?お手数をおかけ致しますがよろしくお願い致します。 <p id="text" data-text="[&quot;Hello, World!&quot;,&quot;Hello, DOM!&quot;,&quot;Hello, JavaScript!&quot;]" data-textindex="-1"></p> <input id="next" type="button" value="next" hidden />
think49

2017/01/24 06:45

To: tiegr_0196 さん まず、「全てのマルチポスト先」でマルチポスト先URIを開示し、解決方法を書いた上でマルチポスト先の質問をクローズして下さい。 マルチポストは回答者に対して大変失礼な行為です。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10169331000 teratailではマルチポストは非推奨であり、マルチポストしてしまった場合の対処法がヘルプに書かれています。 https://teratail.com/help > 最後の文章が表示された際(下の例であれば「Hello, JavaScript!」)のみ、別のページへのリンクを追記させる仕様にすることはできるものでしょうか? listIndex === textList.length - 1 が成立した時に document.getElementById('next').hidden と同じ手法でa要素を表示してやれば可能です。 コードを書いてみてそれでもわからなければ、あなたが書いたコードを記載した新しい質問を立てれば誰かが回答してくれるかもしれません。
tiegr_0196

2017/01/24 07:13

ご返答ありがとうございます。 またご指導大変ありがとうございました。 ルールが分からず失礼いたしました。 マルチポスト先は先程クローズさせていただきました。
guest

0

方法として一番簡単なものは、「aタグをタップさせたいタイミングで表示させ、aタグのonclickに表示を再開する関数を登録する」方法だと思われます。

投稿2017/01/17 10:40

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiegr_0196

2017/01/18 00:41

回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問