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

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

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

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

jQuery

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

Q&A

解決済

1回答

2190閲覧

(jQuery最適化)ページ読み込み後数秒間、jQueryの動作が遅い

yu-smc

総合スコア610

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2018/07/09 09:57

編集2018/07/10 04:49

【前提】
JS/jQuery初心者です。
やろうとしていることは、リスト項目それぞれの項目名をクリックしたら、項目名の横の矢印が下向きから上むきになり、項目名の下に詳細画面がスライド式に現れるという動作です。

以下のようにコードを書いたのですが、ページ読み込み後数秒間の間にこれを発火させるとスライドがかくかくしたりなんだか安定しないです。

js

1 $('.career-name').each(function(){ 2 var count = 0 3 $(this).on('click', function(){ 4 count++; 5 $(this).next('div').children('div').fadeToggle(800); 6 $(this).next('div').slideToggle(500); 7 $(this).children('div').toggleClass('arrow-up'); 8 $(this).children('div').toggleClass('arrow-down',count %2==0); 9 }); 10 });

html

1<li class="career-list_item engineer"> 2 <div class="career-name first-item"> 3 <p>項目名</p> 4 <div class="career-arrow"></div> 5 </div> 6 <div class="career-detail_container"> 7 <div class="career-detail"> 8 <p class="recruit-message">詳細 9 </p> 10 <table class="recruit-conditions"> 11         中略 12 </table> 13 </div> 14 </div> 15</li>

css

1.career-arrow { 2 margin: 7px 16px; 3 width: 18px; 4 height: 18px; 5 border-style: solid; 6 border-width: 0 2px 2px 0; 7 border-color: rgba(255,255,255,0.95); 8 float: right; 9 transform: rotate(45deg); 10} 11 12@keyframes arrow-up { 13 from { 14 transform:rotate(45deg); 15 } 16 50%{ 17 transform:rotate3d(1,1,0,90deg); 18 } 19 to{ 20 transform:rotate3d(1,-0.43,0,180deg) translateX(-7px) translateY(-7px); 21 } 22} 23 24.arrow-up { 25 animation: arrow-up .8s ease-in-out 0s forwards; 26} 27 28@keyframes arrow-down { 29 from { 30 transform:rotate3d(1,-0.43,0,180deg) translateX(-7px) translateY(-7px); 31 } 32 50%{ 33 transform:rotate3d(1,1,0,90deg); 34 } 35 to{ 36 transform:rotate(45deg); 37 } 38} 39 40.arrow-down { 41 animation: arrow-down .8s ease-in-out 0s forwards; 42}

eachで回している点や、クラス指定している点、childrenを使っている点が重さの原因な気がしているのですが、複数項目に対してのコードでよりよい書き方が思い当たりません。

なにかいい案があれば、教えていただけないでしょうか。
よろしくお願いいたします。

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

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

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

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

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

mather

2018/07/09 10:54 編集

ブラウザの開発者ツールでJSの挙動やリソースの読み込み状況をモニタリングしましたか?憶測に頼るのではなく、現状をしっかり把握したほうがいいです。
yu-smc

2018/07/09 12:32

まだ開発者ツールによるデバッグに慣れていないので、もう少し勉強して実状はどうなのか確かめてみます。ありがとうございます。
guest

回答1

0

ベストアンサー

前後の処理がわからず、なんとも・・・ですが、
動的にliが追加されるのに対応するためにeachを入れているのであれば、こんな感じなのかな?

html

1<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> 2<ul class="list"> 3 <li class="career-list_item engineer"> 4 <div class="career-name first-item"> 5 <p>項目名</p> 6 <div class="career-arrow"></div> 7 </div> 8 <div class="career-detail_container"> 9 <div class="career-detail"> 10 <p class="recruit-message">詳細</p> 11 <table class="recruit-conditions"> 12 <tr><th>中略</th></tr> 13 </table> 14 </div> 15 </div> 16 </li> 17</ul>

css

1.career-arrow:after { 2 content: '▼'; 3} 4.arrow-up:after { 5 content: '▲'; 6}

javascript

1$(function(){ //DOMが構築されると読み込まれる 2 3 //このonの書き方なら、動的にリストの中身が増加してもイベントは稼働します 4 $('.list').on('click', 'li .career-name', function(){ 5 $(this).next('.career-detail_container').children('div').fadeToggle(800); 6 $(this).next('div').slideToggle(500); 7 $(this).children('div').toggleClass('arrow-up'); 8 }); 9 10});

投稿2018/07/09 14:31

satoshi_tajima

総合スコア337

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

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

yu-smc

2018/07/10 04:48 編集

$('.list').on('click', 'li .career-name', function() の書き方参考になります! 説明が足りていませんでした。今回CSSのアニメーションを使って矢印に効果を出しているため(質問修正し記載しました)、その矢印のイベント発火をcountを用いて操作し、それぞれの項目でのcountが他の要素に影響を与えないようにeachを使っているのです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問