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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

6746閲覧

jqueryでの1文字ずつのアニメーションについて

teta

総合スコア16

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2018/08/13 11:51

編集2018/08/13 14:47

ジェイクエリーの1文字ずつのテキストアニメーションで複数行対応する方法で困っています
splitで1文字ずつ配列にいれてforeachで配列をspanでくくりアニメーションさせているのですが
brタグなども1文字ずつ格納されてしまうためbrタグは1文字で格納されないようにしたいのですが方法がわかりません
欲を言えばbrタグのみではなくhtmlタグは1文字で配列に格納されずにしたいです。
また、foreachで回してspanを取り付ける方法ではなくて
htmlにspanを書く方法だと簡単に実装できるかと思うのですが毎回1文字ずつspanで囲むのが大変になるので、できればしたくありません。
初めて投稿するため勝手がわかりませんが、今現在このような感じです。
どなたかいいやり方ご教授いただけると助かります。

html

1<p class="text_animate">te<br>st</p>

scss

1 2.text_animate{ 3 span{ 4 transition: 1s; 5 opacity: 0; 6 &.text_animate_on{ 7 transition: 1s; 8 opacity: 1; 9 10 } 11 } 12 &.text_animate_rotate span{ 13 transform: rotate(-45deg); 14 display: inline-block; 15 &.text_animate_rotate_on{ 16 transform: rotate(0deg); 17 } 18 } 19 &.text_animate_size span{ 20 font-size: 22px; 21 &.text_animate_size_on{ 22 font-size: 10px; 23 } 24 } 25}

javascript

1$(function(){ 2 var text=$(".text_animate").html(); 3 /*var html_tags = /</?[^>]+>/; 4 var text_split=text.split(html_tags);*/ 5 var text_split=text.split(""); 6 $(".text_animate").html(""); 7 function animate(){ 8 text_split.forEach(function(val){ 9 /*console.log(val);*/ 10 11 12 $(".text_animate").append("<span>"+val+"</span>"); 13 14 }); 15 16 } 17 animate(); 18 $(window).load(function(){ 19 $(".text_animate span").each(function(index){ 20 $(this).css({transitionDelay:index * 0.6 +"s"}).addClass("text_animate_on"); 21 }); 22 }); 23});

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

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

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

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

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

m.ts10806

2018/08/13 13:16

コードは長すぎて文字数オーバーするなど特別な事情がない限り、外部サービスではなく質問内にコードブロックで囲い提示してください。(ほかにもマークダウン機能が使えるので読みやすくしていただけると)https://teratail.com/help
guest

回答3

0

子要素を一つひとつ取り出して処理すると上手くいきますよ。

js

1$(function(){ 2 var html = ""; 3 $(".text_animate") 4 .contents() 5 .each(function () { 6 if ( 7 this.nodeType === Node.ELEMENT_NODE 8 && this.tagName === "BR" 9 ) { 10 html += "<br>"; 11 } else if (this.nodeType === Node.TEXT_NODE) { 12 this.textContent.split("") 13 .forEach(function (value) { 14 html += "<span>" + value + "</span>"; 15 }); 16 } 17 }); 18 $(".text_animate").html(html); 19 setTimeout(function () { 20 $(".text_animate span").each(function (index) { 21 $(this) 22 .css({ 23 transitionDelay: index * 0.6 + "s" 24 }) 25 .addClass("text_animate_on"); 26 }); 27 }, 10); 28});

投稿2018/08/13 17:31

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

JavaScriptコードにおいて、テキストノードのみにanimate()の処理を施すことで達成できると思われます。
サンプルコード(CodePen)

以下、解説です。

html

1<p class="text_animate">te<br>st</p>

この<p>タグが成す要素(Element)の下には3つの子ノード(Node)が含まれています。(HTML要素はノードの一種です。)

  • テキストノード"te"
  • <br>要素
  • テキストノード"st"

$(".text_animate").children()を呼び出すと子要素(br要素1つのみ)を得ることができますが、$(".text_animate").contents()を呼び出すと子ノード(ノード3つ)を得ることができます。

この方法で書いたコードが以下のとおりです。(前述のサンプルコードと同じ内容)

javascript

1$(function () { 2 // 子ノード3つそれぞれに対して処理 3 $(".text_animate").contents().each(function (_, node) { 4 // 子ノードを一旦DOMツリーから除去 5 // 変数`node`はjQueryオブジェクトではないので`node.remove();`とは書けません。 6 node.parentNode.removeChild(node); 7 8 // ノードの種類によって条件分岐 9 switch (node.nodeType) { 10 // テキストノードなら質問文にある処理を適用 11 case Node.TEXT_NODE: 12 // テキストノードの文字列を取得 13 var text_split = node.textContent.split(""); 14 15 function animate() { 16 text_split.forEach(function (val) { 17 $(".text_animate").append("<span>" + val + "</span>"); 18 }); 19 } 20 animate(); 21 break; 22 // テキストノード以外(HTML要素)ならappendし直す 23 default: 24 $(".text_animate").append(node); 25 } 26 }); 27 28 // 以下、変更点なし 29 $(window).load(function () { 30 $(".text_animate span").each(function (index) { 31 $(this).css({ 32 transitionDelay: index * 0.6 + "s" 33 }).addClass("text_animate_on"); 34 }); 35 }); 36});

投稿2018/08/13 17:17

reosablo

総合スコア339

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

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

teta

2018/08/14 06:21

丁寧な解説ありがとうございます ベストアンサーに選ばせていただきました。
guest

0

var text=$(".text_animate").text()

でどうでしょうか。
あ、これだとbr自体なくなっちゃうからダメなんですね。失礼しました。

投稿2018/08/13 14:49

編集2018/08/13 15:17
takopo

総合スコア484

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問