質問するログイン新規登録
JavaScript

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

HTML

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

Q&A

解決済

1回答

340閲覧

2種類の文字サイズのテキストを、特定箇所のホバーで同時にシャッフルさせたい。

tana2

総合スコア2

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2024/01/19 03:38

編集2024/01/19 04:28

0

0

実現したいこと

JavaScriptの「shuffle-text」を使用して
マウスオーバーしたらテキストがシャッフルされる動きを実装しています。
https://ics.media/entry/15498/

ttlと、copyで違う文字サイズをcssで指定して、
.shuffle-con-aにホバーさせた際に両方がシャッフルするような動きにしたいです。

発生している問題・分からないこと

https://teratail.com/questions/345848

こちらの回答を参考に、(.shuffle-con-a)にマウスホバーした時に、
テキストがシャッフルする動きを作成していました。
(.shuffle-conは複数表示する予定)
ttlとcopyの両方を動くように指定したのですが片方しかシャッフルの動作が行われません。

該当のソースコード

HTML

1<div class="content"> 2 <a href="#" class="shuffle-con-a"> <img src="img.jpg" alt=""> 3 <div class="ttl">タイトル入るタイトルテキスト入ります。</div> 4 <div class="copy">テキスト入ります。ダミーですテキスト入ります。</div> 5 </a> 6</div>

js

1function init() { 2 var effectList = []; 3 var elementList = document.querySelectorAll('.ttl , .copy'); 4 var hoverTarget = document.getElementsByClassName("shuffle-con-a"); 5 6 for (let i = 0; i < elementList.length; i++) { 7 var element = elementList[i]; 8 element.dataset.index = i; 9 effectList[i] = new ShuffleText(element); 10 11 hoverTarget[i].addEventListener('mouseenter', function () { 12 effectList[i].start(); 13 }); 14 } 15}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

両方動作するようにしてみたのですがうまくいきませんでした。

js

1function init() { 2 var effectList = []; 3 var elementList = document.querySelectorAll('.ttl , .copy'); 4 var hoverTarget = document.getElementsByClassName("hover"); 5 for (let i = 0; i < elementList.length; i++) { 6 var element = elementList[i]; 7 element.dataset.index = i; 8 if (element.classList.contains('ttl')) { 9 effectList[i] = new ShuffleText(element); 10 } else if (element.classList.contains('copy')) { 11 effectList[i] = new ShuffleText(element); 12 } 13 14 hoverTarget[i].addEventListener('mouseenter', function () { 15 effectList[i].start(); 16 }); 17 } 18}

補足

実際のコード部分です

html

1 <li class="item sort01"> 2 <div class="item-content"> <a href="#" class="shuffle-con-a"> <img src="img/img_sq01.jpg" alt=""> 3 <div class="mask"> 4 <div class="ttl">タイトル入るタイトルテキスト入ります。</div> 5 <div class="copy">テキスト入ります。ダミーですテキスト入ります。</div> 6 </div> 7 </a></div> 8 </li> 9 <li class="item sort02"> 10 <div class="item-content"> <a href="#" class="shuffle-con-a"> <img src="img/img_sq02.jpg" alt=""> 11 <div class="mask"> 12 <div class="ttl">タイトル入るタイトルテキスト入ります。</div> 13 <div class="copy">テキスト入ります。ダミーですテキスト入ります。</div> 14 </div> 15 </a></div> 16 </li>

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

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

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

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

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

int32_t

2024/01/19 03:44

ブラウザの開発者ツールのコンソールにエラーが出ていませんか。
Lhankor_Mhy

2024/01/19 03:52

ご提示のコードですと、elementList と hoverTarget が同じ要素数である必要があると思いますが、ご提示のHTMLではそうではないようです。実際のコードではどうなっていますか?
tana2

2024/01/19 04:29

コメントありがとうございます。 すみませんJavaScriptに関して理解が乏しく、同じ要素数というのがよく分かっておりません、申し訳ありません。 実際のコード部分記載しました。
guest

回答1

0

ベストアンサー

たとえば「.shuffle-con-a」内の要素間でmouseover/outが変わった場合はどうするのでしょうか?具体的にはttlからcopyにマウスが移動したときにmouseoverは発生するかどうかという話です。
とりあえず発生させていいのであればこんな感じで

javascript

1<script src=" https://cdn.jsdelivr.net/npm/shuffle-text@0.4.0/build/shuffle-text.min.js "></script> 2<script> 3window.addEventListener('DOMContentLoaded', ()=>{ 4 document.querySelectorAll('.shuffle-con-a .ttl,.shuffle-con-a .copy').forEach(el=>{ 5 el.start=function(){new ShuffleText(this).start()}; 6 el.dataset.txt=el.textContent; 7 }); 8 document.addEventListener('mouseover',({target})=>{ 9 target.closest('.shuffle-con-a')?.querySelectorAll('[data-txt]').forEach(el=>{ 10 el.start(); 11 }); 12 }); 13 document.addEventListener('mouseout',({target})=>{ 14 target.closest('.shuffle-con-a')?.querySelectorAll('[data-txt]').forEach(el=>{ 15 el.textContent=el.dataset.txt; 16 }); 17 }); 18}); 19</script> 20<div class="content"> 21<a href="#" class="shuffle-con-a"> <img src="img.jpg" alt="img"> 22<div class="ttl">タイトル入るタイトルテキスト入ります。</div> 23<div class="copy">テキスト入ります。ダミーですテキスト入ります。</div> 24</a> 25</div>

参考

「.shuffle-con-a」内の要素間の移動でシャッフルを発生させない場合。
やりようは色々あると思いますがこんな感じがお手軽で良いかも
mouseoverがmouseenterになるのでご注意ください

javascript

1<script src=" https://cdn.jsdelivr.net/npm/shuffle-text@0.4.0/build/shuffle-text.min.js "></script> 2<script> 3window.addEventListener('DOMContentLoaded', ()=>{ 4 document.querySelectorAll('.shuffle-con-a .ttl,.shuffle-con-a .copy').forEach(el=>{ 5 el.start=function(){new ShuffleText(this).start()}; 6 el.dataset.txt=el.textContent; 7 }); 8 document.addEventListener('mouseenter',({target})=>{ 9 if(target.matches('.shuffle-con-a')){ 10 target.querySelectorAll('[data-txt]').forEach(el=>{ 11 el.start(); 12 }); 13 } 14 },true); 15 document.addEventListener('mouseout',({target})=>{ 16 target.closest('.shuffle-con-a')?.querySelectorAll('[data-txt]').forEach(el=>{ 17 const timerId=setInterval(()=>{ 18 if(el.textContent==el.dataset.txt) clearInterval(timerId); 19 el.textContent=el.dataset.txt; 20 },100); 21 }); 22 }); 23}); 24</script> 25<div class="content"> 26<a href="#" class="shuffle-con-a"> <img src="img.jpg" alt="img"> 27<div class="ttl">タイトル入るタイトルテキスト入ります。</div> 28<div class="copy">テキスト入ります。ダミーですテキスト入ります。</div> 29</a> 30</div>

投稿2024/01/19 09:29

編集2024/01/19 11:43
yambejp

総合スコア118079

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

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

tana2

2024/01/19 10:02

回答ありがとうございます。 無事解決しました、本当にありがとうございました!!!! 書き方もこれから自分で書けるようになれるようになりたいです。 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問