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

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

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

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

Q&A

解決済

2回答

274閲覧

【ES5/JS】開閉処理ボタンについて

frtne

総合スコア29

JavaScript

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

0グッド

0クリップ

投稿2020/01/07 15:33

編集2020/01/08 14:44

クリックすると要素が表示されるものを作っています。

<質問>
機能的には問題ないのですが、コード的に改善できるところを教えて欲しいです。
また、今は滑らかにスライドしていないので、jQueryのslideToggleのようにする良い方法もあれば御指南いただきたいです。

<仕様>
・JSを

よろしくお願いします。

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

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

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

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

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

m.ts10806

2020/01/07 20:56

コードは外部サービスだけでなく質問本文にもマークダウンにてご提示ください。 また「とりあえず全部見てほしい」は作業依頼、デバッグ依頼です。質問ではありません。 もっとポイントを絞った方が良いでしょう。
yambejp

2020/01/08 00:40 編集

転載先のソースを読み取れではなく仕様くらいはきちんと提示してください jQueryは使って良いのか、jsだけでやりたいのかも付記してください (cssを利用しないスライド処理ならjQueryってことなのかな?)
miyabi_takatsuk

2020/01/08 00:52 編集

ES5で書く理由も掲示お願いします。 古いブラウザ対応のために必要ということでしょうか? 特に上記のような理由がなければ、ES6〜の書き方でいいと思いますが。 (よりよいコード、となら、ES6〜でもっと短く、わかりやすい構文にできる可能性も出てくるので)
guest

回答2

0

コード的に改善できるところを教えて欲しい
  • window.onloadelement.onclickではなくて、addEventListenerを使った方がいいのでは?
  • ネストが深いので、コードを割った方がいいかもしれません。
  • styleを操作するより、classを操作してスタイル記述をCSSに書く方が、個人的には好みです。
今は滑らかにスライドしていないので、jQueryのslideToggleのようにする良い方法もあれば

CSS Transition がおすすめです。
CSS トランジションの使用 - CSS: カスケーディングスタイルシート | MDN

投稿2020/01/08 00:43

編集2020/01/08 00:43
Lhankor_Mhy

総合スコア36078

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

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

frtne

2020/01/08 14:37

ご回答ありがとうございます!
guest

0

ベストアンサー

開いたときの隠す処理と、ボタンクリックしたときのトグル処理が
微妙に競合しますね・・・

投稿2020/01/08 00:55

編集2020/01/08 00:59
yambejp

総合スコア114812

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

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

yambejp

2020/01/08 01:04 編集

調整しました <script> $(function(){ $('.js_slide_item').filter(function(){ var idx=$(this).closest('.js_slide').find('.js_slide_item').index(this); return $(this).closest('.js_slide').data('default')<=idx; }).hide(); $('.js_slide_button').on('click',function(){ var txt=$(this).text(); $(this).text(txt=="開く"?"閉じる":"開く"); var pre=$(this).closest('div').prev('.js_slide'); var def=$(pre).data('default'); pre.find('.js_slide_item:gt('+(def-1)+')').slideToggle(); }); }); </script> <div id="banner-message"> <ul class="js_slide" data-default="1"> <li class="js_slide_item">item1</li> <li class="js_slide_item">item2</li> <li class="js_slide_item">item3</li> <li class="js_slide_item">item4</li> </ul> <div> <button class="js_slide_button">開く</button> </div> <ul class="js_slide" data-default="2"> <li class="js_slide_item">item1</li> <li class="js_slide_item">item2</li> <li class="js_slide_item">item3</li> </ul> <div> <button class="js_slide_button">開く</button> </div> </div>
frtne

2020/01/08 14:38

すごくスッキリ。! 具体的に教えていただきありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問