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

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

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

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

HTML

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

Q&A

2回答

913閲覧

スクロールバーが表示されるときに、ボタンをクリックするとfontawesomeのアイコンが変更されるようにしたい

KKsall

総合スコア25

JavaScript

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

HTML

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

0グッド

1クリップ

投稿2021/11/05 04:07

編集2021/11/05 04:11

現状
clickするとスクールバーが左右に移動する。
クリックイベントでreplaceでクラス名を変更したいのですが、うまくいかず。
スピードもtransitionをcssにつけてもだめで
レクチャーいただければ幸いです。

<div class="l-table"> <div class="js-scrollable p-scrollbar"> <table class="p-table-search-theme"> <thead class="has-background-thead"> <tr class="thead"> <th class="sorting th-first" rowspan="2">登録<br>番号</th> <th class="sorting th-second" rowspan="2">登録<br>番号</th> <th class="sorting th-third" rowspan="2">技術名称</th> <th class="th-fourth" rowspan="2">技術名称</th> <th class="th-fifth" colspan="2">技術名称 </th> <th class="sorting th-seventh" rowspan="2">技術名称</th> <th class="sorting th-eighth" rowspan="2">技術名称</th> <th class="th-ninth" rowspan="2">カタログ・パンフレット</th> </tr> <tr> <th class="sorting-sc">農業農村<br>設備事業</th> <th class="sorting-sc">その他<br>事業</th> </tr> </thead> <tbody> <tr> <td> 0 </td> <td class="text-left"><a href="#"> 株</a> </td> <td class="text-left"><a href="#">text</a></td> <td class="text-left">text </td> <td>12648 件</td> <td>12648 件</td> <td>2021年</td> <td>2021年/01</td> <td><span class="icon"><a href="#">リーフレット(cs-21)</a></span><span class="icon"><a href="#">製品カタログ(cs-21シリーズ)</a></span></td> </tr> <tr> <td> 1 </td> <td class="text-left"><a href="#"> 株</a> </td> <td class="text-left"><a href="#">text</a></td> <td class="text-left">text </td> <td>12648 件</td> <td>12648 件</td> <td>2021年</td> <td>2021年/01</td> <td><span class="icon"><a href="#">リーフレット(cs-21)</a></span><span class="icon"><a href="#">製品カタログ(cs-21シリーズ)</a></span></td> </tr> <tr> <td> 2 </td> <td class="text-left"><a href="#"> 株</a> </td> <td class="text-left"><a href="#">text</a></td> <td class="text-left">text </td> <td>12648 件</td> <td>12648 件</td> <td>2021年</td> <td>2021年/01</td> <td><span class="icon"><a href="#">リーフレット(cs-21)</a></span><span class="icon"><a href="#">製品カタログ(cs-21シリーズ)</a></span></td> </tr> <tr> <td> 3 </td> <td class="text-left"><a href="#"> 株</a> </td> <td class="text-left"><a href="#">text</a></td> <td class="text-left">text </td> <td>12648 件</td> <td>12648 件</td> <td>2021年</td> <td>2021年/01</td> <td><span class="icon"><a href="#">リーフレット(cs-21)</a></span><span class="icon"><a href="#">製品カタログ(cs-21シリーズ)</a></span></td> </tr> <tr> <td> 4 </td> <td class="text-left"><a href="#"> 株</a> </td> <td class="text-left"><a href="#">text</a></td> <td class="text-left">text </td> <td>12648 件</td> <td>12648 件</td> <td>2021年</td> <td>2021年/01</td> <td><span class="icon"><a href="#">リーフレット(cs-21)</a></span><span class="icon"><a href="#">製品カタログ(cs-21シリーズ)</a></span></td> </tr> <tr> <td> 5 </td> <td class="text-left"><a href="#"> 株</a> </td> <td class="text-left"><a href="#">text</a></td> <td class="text-left">text </td> <td>12648 件</td> <td>12648 件</td> <td>2021年</td> <td>2021年/01</td> <td><span class="icon"><a href="#">リーフレット(cs-21)</a></span><span class="icon"><a href="#">製品カタログ(cs-21シリーズ)</a></span></td> </tr> </tbody> </table> <button type="button" class="c-scroll-button border-radius"><i class="fas fa-chevron-right"></i><i class="fas fa-chevron-right"></i></button> </div> </div> <style> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta2/css/all.min.css" integrity="sha512-YWzhKL2whUzgiheMoBFwW8CKV4qpHQAEuvilg9FAn5VJUDwKZZxkJNuGM4XkWuk94WCrrwslk8yWNGmY1EduTA==" crossorigin="anonymous" referrerpolicy="no-referrer" /> <link rel="stylesheet" href="https://unpkg.com/scroll-hint@1.0.0/css/scroll-hint.css"> </style> <script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta2/js/all.min.js" integrity="sha512-cyAbuGborsD25bhT/uz++wPqrh5cqPh1ULJz4NSpN9ktWcA6Hnh9g+CWKeNx2R0fgQt+ybRXdabSBgYXkQTTmA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
const buttonscroll = document.querySelector('.c-scroll-button'); const container = document.querySelector('.p-scrollbar'); const caret = document.querySelector('.fa-chevron-right'); const button = document.querySelector('.c-scroll-button'); buttonscroll.addEventListener('click', movement); function movement() { if (container.scrollLeft == 0) { container.scrollLeft = container.scrollWidth; } else { container.scrollLeft = 0; } } button.forEach((caret) => { button.addEventListener("click", () => { if (button.type === "caret") { caret.classList.replace("fa-chevron-right", "fa-chevron-left"); } else { caret.classList.replace("fa-chevron-left", "fa-chevron-right"); } }); });

サンプル
https://codepen.io/boo-jp/pen/ZEJvPEV

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

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

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

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

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

guest

回答2

0

おそらく、movement()の挙動に合わせて、「ボタンを押すと右に動くときはボタン内に右矢印を表示、反対なら左矢印を表示したい」ということなんでしょう。こういう情報、質問文に書くべきだと思います。

コード内のbuttonscrollbuttonは同じもののはずで、すでに movement() がクリックで呼ばれるようになっているのですから、クラス変更も movement() の中でやればよいでしょう。

  • container.scrollLeft = container.scrollWidth を実行した場合は、それ以降は左にしか進めない → fa-chevron-rightfa-chevron-left に置き換える
  • container.scrollLeft = 0 を実行した場合は、それ以降は右にしか進めない → fa-chevron-leftfa-chevron-right に置き換える

クラスを置換する対象は押されたボタンではなく、ボタンの子供要素で複数あるので、for (let caret of button.querySelectorAll('.fas')) { などでループする必要がありますね。

投稿2021/11/05 05:32

編集2021/11/05 06:06
int32_t

総合スコア21016

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

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

KKsall

2021/11/06 10:19 編集

for文はif文とはべつですかね?難しい。。 function movement() { if (container.scrollLeft == 0) { container.scrollTo({ left: container.scrollWidth, behavior: "smooth", //behaviowプロパティでスムースに動くようにできる }); for (let caret of button.querySelectorAll('.fas')) { caret.classList.replace("fa-chevron-left", "fa-chevron-right"); } } else { container.scrollTo({ left: 0, behavior: "smooth", //behaviowプロパティでスムースに動くようにできる }); } }
int32_t

2021/11/06 10:34

else 側にも同じようなforループが必要です。
KKsall

2021/11/06 12:08

function movement() { if (container.scrollLeft == 0) { container.scrollTo({ left: container.scrollWidth, behavior: "smooth", }); for (let caret of button.querySelectorAll('.fas')) { caret.classList.replace("fa-chevron-left", "fa-chevron-right"); } } else { container.scrollTo({ left: 0, behavior: "smooth", }); for (let caret of button.querySelectorAll('.fas')) { caret.classList.replace("fa-chevron-right", "fa-chevron-left"); } } } 変化がないですね。。なんか間違ってます?
int32_t

2021/11/06 13:28

classList.replace()のパラメータが逆です。それ以外は大丈夫に見えます。
guest

0

const button = document.querySelector('.c-scroll-button')とありますので、buttonはElement(またはnull)でしょう。
Elementには、forEachメソッドはないです。

NodeList.prototype.forEach() - Web API | MDN

querySelectorAllメソッドであれば、NodeListが返りますが、その場合はbutton.addEventListenerでエラーになるはずです。
問題がなければ、forEachを外してしまう方がわかりやすそうです。

まずは、DevToolsの使い方を覚えて、エラーメッセージを確認できるようになった方がいいでしょう。


ただ、button.type === "caret"については何をしたいのかがよくわかりませんでした。

投稿2021/11/05 05:21

編集2021/11/05 05:22
Lhankor_Mhy

総合スコア36163

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問