###実現したいこと
下記HTMLについて、➀~➅の順で処理したいです。
➀<button>
クリック
➁.outer
をfadeOut()
➂<p>cat</p>
と<p>dog</p>
を『1つ』ずつ挿入
➃<button>
のデータ属性に応じた箇所をfadeIn()
➄<p>ape</p>
を『1つ』挿入
ざっくりいいますと
★<p>cat</p>
と<p>dog</p>
は非表示中に見えないように挿入したい!!
★<p>ape</p>
は表示後に挿入したい!!
ということですが、上に『1つ』を強調してあるように、これが『複数』になってしまう問題が発生しました。
###発生している問題
下記jQueryで<button>
をクリックすると、<p>cat</p>
と<p>dog</p>
が『6つ』ずつ挿入され、<p>ape</p>
は『2つ』挿入されてしまいます。全部『1つ』でいいのに!
###該当のソースコード
下記HTMLとjQueryのサンプルをどうぞ。
https://jsfiddle.net/96bqn8hf/
まずHTMLです。表示切替の流れを作るため、<button>
のデータ属性にouterType
とinnertType
を持たせ、それぞれ表示を切り替えるべき.outer
と.inner
に対応させました。
html
1<div class="wrapeer"> 2 3 <div class="outer" data-outerType="1"> 4 <div class="inner" data-innerType="A">innerA</div> 5 <div class="inner" data-innerType="B">innerB</div> 6 </div> 7 8 <div class="outer" data-outerType="2"> 9 <div class="inner" data-innerType="C">innerC</div> 10 <div class="inner" data-innerType="D">innerD</div> 11 </div> 12 13 <button type="button" data-innerType="A" data-outerType="1">A</button> 14 <button type="button" data-innerType="B" data-outerType="1">B</button> 15 <button type="button" data-innerType="C" data-outerType="2">C</button> 16 <button type="button" data-innerType="D" data-outerType="2">D</button> 17 18</div>
次にjQueryですが、➀~➅の流れのために
☆fadeOut()
の中にcat();
とdog();
を書いた。
☆fadeIn()
の中にape();
を書いた。
ということをやってみました。タイミングはいいかんじ。
ですが、こうすると挿入が『複数』になるわけです。
$('button').click(function(){ const outerType = $(this).attr('data-outerType'); const innerType = $(this).attr('data-innerType'); $('.outer, .inner').fadeOut(200, function() { cat(); dog(); }); $('.outer[data-outerType="'+outerType+'"], .inner[data-innerType="'+innerType+'"]').delay(200).fadeIn(200, function() { ape(); }); }); function cat(){ $('.outer').append('<p>cat</p>'); } function dog(){ $('.outer').append('<p>dog</p>'); } function ape(){ $('.outer').append('<p>ape</p>'); }
###試したこと
上だと『複数』の挿入になり、なぜかといろいろ試していましたところ、どうやら.outer
と.inner
の数に応じて挿入されてしまうことがわかりました。
これは困ります。
★<p>cat</p>
と<p>dog</p>
は非表示中に見えないように挿入したい!!
★<p>ape</p>
は表示後に挿入したい!!
という目的のために、
☆fadeOut()
の中にcat();
とdog();
を書いた。
☆fadeIn()
の中にape();
を書いた。
をしていて、つまりfadeout()
後に挿入が実行され、同様にfadeIn()
の後に実行されるようにしているわけですが、こいつらせいで対象の.outer
と.inner
の数だけ挿入が実行されてしまうみたいなんです。
だもんで☆の関数を「中に」でなく「外に」とすれば、『複数』は『1つ』にできるって話なんですが、でもそれだと、そもそもの目的である★が実現できません。
鬼のように厄介ですが、これって解決できますか??
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/18 06:01
2019/10/18 06:09
2019/10/18 06:11
2019/10/18 06:20
2019/10/18 06:41 編集
2019/10/18 06:47
2019/10/18 06:48 編集
2019/10/18 06:50
2019/10/18 06:58