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

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

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

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

Q&A

解決済

2回答

723閲覧

カルーセルプラグインSiema.jsでインジケーターを点灯させたい

hibikikudo

総合スコア238

JavaScript

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

0グッド

2クリップ

投稿2019/04/03 09:35

Siema.jsでカルーセルを実装しています。 perPage: 2 loop: true オプションを加えると、インジケーター(ページネーション)の最後の一つが点灯しなくなってしまいます。
どのようにすれば最後の一つのインジケーターを点灯させられるでしょうか?

サンプルコード

html

1<div class="siema"> 2 <img src="https://pawelgrzybek.com/siema/assets/siema--pink.svg" alt="Siema image" /> 3 <img src="https://pawelgrzybek.com/siema/assets/siema--yellow.svg" alt="Siema image" /> 4 <img src="https://pawelgrzybek.com/siema/assets/siema--pink.svg" alt="Siema image" /> 5 <img src="https://pawelgrzybek.com/siema/assets/siema--yellow.svg" alt="Siema image" /> 6</div> 7<button class="prev">Prev</button> 8<button class="next">Next</button>

javascript

1class SiemaWithDots extends Siema { 2 3 addDots() { 4 this.dots = document.createElement('div'); 5 this.dots.classList.add('dots'); 6 for (let i = 0; i < this.innerElements.length; i++) { 7 const dot = document.createElement('button'); 8 dot.classList.add('dots__item'); 9 dot.addEventListener('click', () => { 10 this.goTo(i); 11 }) 12 this.dots.appendChild(dot); 13 } 14 this.selector.parentNode.insertBefore(this.dots, this.selector.nextSibling); 15 } 16 17 updateDots() { 18 for (let i = 0; i < this.dots.querySelectorAll('button').length; i++) { 19 const addOrRemove = this.currentSlide === i ? 'add' : 'remove'; 20 this.dots.querySelectorAll('button')[i].classList[addOrRemove]('dots__item--active'); 21 } 22 } 23} 24 25 26const mySiemaWithDots = new SiemaWithDots({ 27 perPage: 2, 28 loop: true, 29 onInit: function() { 30 this.addDots(); 31 this.updateDots(); 32 }, 33 onChange: function() { 34 this.updateDots() 35 }, 36}); 37setInterval(() => mySiemaWithDots.next(), 2000); 38const prev = document.querySelector('.prev'); 39const next = document.querySelector('.next'); 40 41prev.addEventListener('click', () => mySiemaWithDots.prev()); 42next.addEventListener('click', () => mySiemaWithDots.next()); 43 44 45

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

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

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

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

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

guest

回答2

0

ベストアンサー

this.currentSlideが-1になっていることがあるようです。
なので、const addOrRemove = (this.currentSlide+4)%4 === i ? 'add' : 'remove';とかどうでしょうか。

投稿2019/04/20 03:39

Lhankor_Mhy

総合スコア36074

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

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

hibikikudo

2019/04/22 03:03

ありがとうございます。
Lhankor_Mhy

2019/04/22 05:22

なかなか手厳しいですね……
hibikikudo

2019/04/22 05:41

teratailでは自己解決法を記入するとそれが自動的にベストアンサーになってしまうのですね。せっかく Lhankor_Mhyさんにご回答いただいたのに、私が仕様に詳しくなく申し訳ありません。
Lhankor_Mhy

2019/04/22 07:35

あ、いえ、こちらこそすみませんでした。
guest

0

Lhankor_Mhyさんのご回答で解決できました。数字部分を変数化して下記のようになりました。ありがとうございました。

updateDots() { for (let i = 0; i < this.dots.querySelectorAll('button').length; i++) { const addOrRemove = this.currentSlide === i ? 'add' : 'remove'; this.dots.querySelectorAll('button')[i].classList[addOrRemove]('dots__item--active'); } }

updateDots() { let buttonLength = this.dots.querySelectorAll('button').length for (let i = 0; i < buttonLength; i++) { const addOrRemove = (this.currentSlide+buttonLength)%buttonLength === i ? 'add' : 'remove'; this.dots.querySelectorAll('button')[i].classList[addOrRemove]('dots__item--active'); } }

投稿2019/04/22 03:10

hibikikudo

総合スコア238

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問