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

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

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

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

Q&A

0回答

146閲覧

スライドショーにアニメーションを付与したい、settimeoutを解除したい

at-ek

総合スコア17

JavaScript

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

0グッド

1クリップ

投稿2022/05/20 22:51

javascriptでスライドショーを作成しているのですが解決できない問題点が2つあります。

実装しようとしているスライドショーの内容は以下です
・自動で画像が切り替わる
・次へ、前へボタンをクリックすると画像が切り替わる

1.画像が切り替わるときにフェードインさせて表示させたいのですがうまく切り替わりません。animateメソッドを使用し実装しようと考えています。画像は切り替わろうとしてくれるのですが最初の画像に戻ってしまします。animateメソッドを使用せず、styleを変更するだけなら上手く画像が切り替わってくれます。

2.自動で画像の切り替えをしたいのですがボタンを押したらsettimeoutをリセットしたいです
(例)5秒で自動的に画像が切り替わるが、3秒経ってからボタンを押し画像が切り替わった場合また5秒かけて次の画像を表示させたい。```ここに言語を入力
コード

<ul class="slider_area" id="slider_area"> <li><a href="#"><img src="img/slider/slider-0.png"></a></li> <li><a href="#"><img src="img/slider/slider-1.png"></a></li> <li><a href="#"><img src="img/slider/slider-2.png"></a></li> <li><a href="#"><img src="img/slider/slider-3.png"></a></li> <li><a href="#"><img src="img/slider/slider-4.png"></a></li> <li><a href="#"><img src="img/slider/slider-5.png"></a></li> </ul> <p class="fa-solid fa-angle-left prev" id="prev"></p> <p class="fa-solid fa-angle-right next" id="next"></p> </div> ```const prev = dom.getElementById('prev'); const next = dom.getElementById('next'); const imgs = dom.querySelectorAll('li > a > img'); const mainImg = dom.getElementById('slider_area'); let currentIndex = 0; function moveSlide() { const imgWidth = imgs[0].getBoundingClientRect().width; // mainImg.style.transform = `translateX(${-1 * imgWidth * currentIndex}px)`; mainImg.animate( [ {transform: `translateX(${-1 * imgWidth * currentIndex}px)`} ], { duration: 500 } ); } function tggleArrow() { prev.classList.remove('hidden'); next.classList.remove('hidden'); if(currentIndex === 0) { prev.classList.add('hidden'); } if(currentIndex === imgs.length - 1) { next.classList.add('hidden'); } } function autoSlide() { setTimeout(() => { currentIndex++; if(currentIndex === imgs.length) { currentIndex = 0; } tggleArrow(); moveSlide(); autoSlide(); }, 5000); } tggleArrow(); autoSlide(); prev.addEventListener('click', () => { currentIndex--; clearTimeout(autoSlide()); tggleArrow(); moveSlide(); }); next.addEventListener('click', () => { currentIndex++; tggleArrow(); moveSlide(); ```.slider { width: 80vw; height: 100vh; margin: 0 auto; display: flex; justify-content: center; align-items: center; position: relative; top: 0; overflow: hidden; &::after { content: ''; position: absolute; left: 0; bottom: 0; transform: translateY(-50%); width: 100vw; height: 4px; background-color: $mainColor; } .slider_area { max-width: 100%; max-width: 850px; display: flex; li { min-width: 100%; a { width: 100%; height: 100%; img { width: 100%; } } } } .prev { background-color: rgba(255,255,255,.7); position: absolute; top: 50%; left: 16px; transform: translateY(-50%); cursor: pointer; &::before { font-size: 32px; } &.hidden { display: none; } } .next { background-color: rgba(255,255,255,.7); position: absolute; top: 50%; right: 16px; transform: translateY(-50%); cursor: pointer; &::before { font-size: 32px; } &.hidden { display: none; } } }

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問