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

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

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

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

HTML5

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

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

1回答

655閲覧

Ajaxで外部javascriptを取得する度に、javascriptの動作を初期化する方法を知りたい。

espil

総合スコア19

CSS3

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

HTML5

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

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2020/07/24 23:53

編集2020/07/25 14:36

Ajaxで外部html+javascriptを取得する度に、javascriptでの動作をリセット(初期化)する方法を探しています。

index.htmlの<nav><a>リンクをクリックしたときに<main>部分を、Ajaxで取得するように実装しています。
<a>リンク先htmlは、home,about,works,contactで、index.htmlを最初に開いた時は、<main>部分はhome.htmlを取得した状態で開かれるようにしています。
そのhome.htmlにて、javascriptでテキストの一部が繰り返し、一定のリズムで切り替わるテキストエフェクトを実装したい(codepenをマネしました)のですが、以下問題に当たってしまいました。

発生している問題

Ajaxでhome.htmlを取得する度に、home.htmlのjavascriptの値が増えてしまい、実装したいテキストエフェクトのリズムが乱れ、テキストが重なってしまいます。
index.htmlでhome.htmlを再度取得した時も、初期ページと同じように、テキストエフェクトを一定のリズムで切り替わるようにjavascriptを動かすにはどのようにすればよいかご教示頂きたく、
わかりづらく申し訳ないですが、お力添え頂けると幸甚です。

該当のソースコード

html

1 Index.html 2 3 <nav id="type5"> 4 <ul> 5 <li><a href="home/home.html">Home</a></li> 6 <li><a href="about/about.html">About</a></li> 7 <li><a href="works/works.html">works</a></li> 8 <li><a href="contact/contact.html">Contact</a></li> 9 </ul> 10 </nav> 11 <main> 12 <div class="pageDisplay"></div> 13 </main> 14 <script src="js/index.js" type="text/x-javascript"></script>

js

1index.js 2 3$(function(){ 4 //ページを表示させる箇所の設定 5 var $content = $('.pageDisplay'); 6 //ボタンをクリックした時の処理 7 $(document).on('click', '#type5 a',function(event) { 8 event.preventDefault(); 9 //.menu aのhrefにあるリンク先を保存 10 var link = $(this).attr("href"); 11 //リンク先が今と同じであれば遷移しない 12 if(link == lastpage){ 13 return false; 14 }else{ 15 $content.fadeOut(600, function() { 16 getPage(link); 17 }); 18 //今のリンク先を保存 19 lastpage = link; 20 } 21 22 }); 23 //初期設定 24 getPage("home/home.html"); 25 var lastpage = "home/home.html"; 26 27 //ページを取得してくる 28function getPage(elm){ 29 $.ajax({ 30 type: 'GET', 31 url: elm, 32 dataType: 'html', 33 }).done(function (data) { 34 $content.html(data).fadeIn(600); 35 }).fail(function (data){ 36 alert('問題がありました。'); 37 }); 38 } 39});

html

1home.html, home.js 2 3 <div class="rotating-text"> 4 <p>CSS Animation is</p> 5 <p> 6 <span class="word alizarin">awesome.</span> 7 <span class="word wisteria">beautiful.</span> 8 <span class="word peter-river">creative.</span> 9 <span class="word emerald">fabulous.</span> 10 <span class="word sun-flower">interesting.</span> 11 </p> 12</div> 13 <script> 14"use strict"; 15var words = document.querySelectorAll(".word"); 16words.forEach(function (word) { 17 var letters = word.textContent.split(""); 18 word.textContent = ""; 19 letters.forEach(function (letter) { 20 var span = document.createElement("span"); 21 span.textContent = letter; 22 span.className = "letter"; 23 word.append(span); 24 }); 25}); 26var currentWordIndex = 0; 27var maxWordIndex = words.length - 1; 28words[currentWordIndex].style.opacity = "1"; 29var rotateText = function () { 30 var currentWord = words[currentWordIndex]; 31 var nextWord = currentWordIndex === maxWordIndex ? words[0] : words[currentWordIndex + 1]; 32 // rotate out letters of current word 33 Array.from(currentWord.children).forEach(function (letter, i) { 34 setTimeout(function () { 35 letter.className = "letter out"; 36 }, i * 80); 37 }); 38 // reveal and rotate in letters of next word 39 nextWord.style.opacity = "1"; 40 Array.from(nextWord.children).forEach(function (letter, i) { 41 letter.className = "letter behind"; 42 setTimeout(function () { 43 letter.className = "letter in"; 44 }, 340 + i * 80); 45 }); 46 currentWordIndex = 47 currentWordIndex === maxWordIndex ? 0 : currentWordIndex + 1; 48}; 49rotateText(); 50setInterval(rotateText, 4000); 51 </script>

js

1home.js (home.htmlに直打ちしています) 2 3"use strict"; 4var words = document.querySelectorAll(".word"); 5words.forEach(function (word) { 6 var letters = word.textContent.split(""); 7 word.textContent = ""; 8 letters.forEach(function (letter) { 9 var span = document.createElement("span"); 10 span.textContent = letter; 11 span.className = "letter"; 12 word.append(span); 13 }); 14}); 15var currentWordIndex = 0; 16var maxWordIndex = words.length - 1; 17words[currentWordIndex].style.opacity = "1"; 18var rotateText = function () { 19 var currentWord = words[currentWordIndex]; 20 var nextWord = currentWordIndex === maxWordIndex ? words[0] : words[currentWordIndex + 1]; 21 // rotate out letters of current word 22 Array.from(currentWord.children).forEach(function (letter, i) { 23 setTimeout(function () { 24 letter.className = "letter out"; 25 }, i * 80); 26 }); 27 // reveal and rotate in letters of next word 28 nextWord.style.opacity = "1"; 29 Array.from(nextWord.children).forEach(function (letter, i) { 30 letter.className = "letter behind"; 31 setTimeout(function () { 32 letter.className = "letter in"; 33 }, 340 + i * 80); 34 }); 35 currentWordIndex = 36 currentWordIndex === maxWordIndex ? 0 : currentWordIndex + 1; 37}; 38rotateText(); 39setInterval(rotateText, 4000);

css

1home.css 2 3.rotating-text { 4 font-family: Lato, sans-serif; 5 font-weight: 600; 6 font-size: 36px; 7 color: black; 8 transform: translateX(-80px); 9} 10.rotating-text p { 11 display: inline-flex; 12 margin: 0; 13 vertical-align: top; 14} 15.rotating-text p .word { 16 position: absolute; 17 display: flex; 18 opacity: 0; 19} 20.rotating-text p .word .letter { 21 transform-origin: center center 25px; 22} 23.rotating-text p .word .letter.out { 24 transform: rotateX(90deg); 25 transition: 0.32s cubic-bezier(0.6, 0, 0.7, 0.2); 26} 27.rotating-text p .word .letter.in { 28 transition: 0.38s ease; 29} 30.rotating-text p .word .letter.behind { 31 transform: rotateX(-90deg); 32} 33 34.alizarin { 35 color: #e74c3c; 36} 37 38.wisteria { 39 color: #8e44ad; 40} 41 42.peter-river { 43 color: #3498db; 44} 45 46.emerald { 47 color: #2ecc71; 48} 49 50.sun-flower { 51 color: #f1c40f; 52}

html

1about.html 2<h1>about作成中</h1> 3 4works.html 5<h1>works作成中</h1> 6 7contact.html 8<h1>contact作成中</h1>

補足情報(FW/ツールのバージョンなど)

jQuery3.4.1

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

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

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

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

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

guest

回答1

0

$content.html(data)とする直前で下記のいずれかを実行すれば良いと思います。

javascript

1$content.html('') 2もしくは 3$content.empty()

投稿2020/07/25 01:02

編集2020/07/25 01:03
FrontEnd_Japan

総合スコア271

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

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

espil

2020/07/25 12:28

ありがとうございます! 試してみたところ、記述方法調べながらやってみたのですが、うまくわかっておらず、 超初心者で申し訳ありませんが、記述についても拝見させて頂けると幸いです。
FrontEnd_Japan

2020/07/25 12:42 編集

}).done(function (data) { $content.html('') // $content.empty(); $content.html(data).fadeIn(600); // ここでdataを入れているのでその前で初期化をする。
espil

2020/07/25 14:17

お力添えありがとうございます。試してみたんですが、初期化せず(この表現が合っているか)、home以外をクリックし、再度homeをクリックしてページを見てみる手動を繰り返すほど、やはりテキストエフェクトの挙動が、ズレてしまいます。 頂いた情報を元に再度模索します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問