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

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

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

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

HTML

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

Q&A

2回答

3756閲覧

背景とテキストをボタンクリック+自動で同時に切り替えたい

MeB

総合スコア104

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2018/04/09 00:54

編集2018/04/10 02:26

https://www.synergy-marketing.co.jp/
上記のサイトのように
メインビジュアルの背景とテキストを自動でかつ左右のボタンクリックで切り替えるようにしたいのですが、
どのようにしたらよいのでしょうか?

現在は下記のコードで自動でフェードイン・アウトで切り替えするところはできておりますが、
ここからボタンを追加して切り替える方法がわからない状態です。

html

1<div id="main_visual"> 2 <div class="inner"> 3 <div class="inner_bg_top"></div> 4 <p class="inner_bg"></p> 5 <div class="catch-left"> 6 <ul class="catch-left-title"> 7 <li>テキスト01</li> 8 <li>テキスト02</li> 9 <li>テキスト03</li> 10 </ul> 11 <ul class="catch-left-text"> 12 <li>aaaaaaaaaa</li> 13 <li>bbbbbbbbbb</li> 14 <li>cccccccccc</li> 15 </ul> 16 </div> 17 </div> 18 </div>

js

1//背景自動切り替え 2var speed = 1000; // フェードイン・フェードアウトの処理時間(1000で1秒) 3var times = 5000; // 画像切り替えの間隔(1000で1秒) 4var bgimages = [ 5'images_c/mainvisual_cafe.png', 6'images_c/mainvisual_school.png', 7'images_c/mainvisual_consulting.png' // 最後に,をつけない 8]; 9var position = ['0','0', '0']; 10$(function(){ 11// 現在の背景画像番号格納する変数 12var thisnum = 0; 13// 定期的に実行 14setInterval(function(){ 15// 背景をフェードアウト 16$("#main_visual .inner .inner_bg").fadeOut(speed,function(){ 17// 背景画像番号変更 18thisnum = thisnum === bgimages.length - 1 ? 0 : thisnum + 1; 19// 背景画像を変更しフェードイン 20$(this).css({"background-image":"url("+bgimages[thisnum]+")","background-position":position[thisnum] + " 0"}).fadeIn(speed); 21 22}); 23}, times); 24}); 25 26//テキスト自動切り替え 27$.fn.autoChange = function(config) { 28 // オプション 29 var options = $.extend({ 30 effect : 'fade', 31 type : 'repaet', 32 timeout : 3000, 33 speed : 1000 34 }, config); 35 36 return this.each(function() { 37 // カウンター初期化 38 var current = 0; 39 var next = 1; 40 41 // 指定した要素の子要素を取得 42 var element = $(this).children(); 43 44 // 全ての要素を非表示にする 45 $(element).hide(); 46 47 // 最初の要素だけ表示する 48 $(element[0]).show(); 49 50 // 要素を切り替えるスクリプト 51 var change = function(){ 52 // フェードしながら切り替える場合 53 if (options.effect == 'fade') { 54 $(element[current]).fadeOut(options.speed); 55 $(element[next]).fadeIn(options.speed); 56 57 // スライドしながら切り替える場合 58 } else if (options.effect == 'slide') { 59 $(element[current]).slideUp(options.speed); 60 $(element[next]).slideDown(options.speed); 61 } 62 63 // リピートする場合 64 if (options.type == 'repeat') { 65 if ((next + 1) < element.length) { 66 current = next; 67 next++; 68 } else { 69 current = element.length - 1; 70 next = 0; 71 } 72 } 73 74 // 最後の要素でストップする場合 75 if (options.type == 'stop') { 76 if ((next + 1) < element.length) { 77 current = next; 78 next++; 79 } else { 80 return; 81 } 82 } 83 }; 84 85 // 設定時間毎にスクリプトを実行 86 var timer = setInterval(function(){change();}, options.timeout); 87 }); 88}; 89 90 91// 自動切り替えする要素の設定 92 jQuery(function($){ 93 $('.catch-left-title').autoChange({effect : 'fade', type : 'repeat', timeout: 5000, speed : 2000}); 94 $('.catch-left-text').autoChange({effect : 'fade', type : 'repeat', timeout: 5000, speed : 2000}); 95});

ご教示宜しくお願いします。

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

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

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

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

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

guest

回答2

0

直接的な回答ではないのですが, 個人的にはCSS+JavaScriptでの対処が好きです.

CSSのtransitionanimationプロパティでフェードインやテキストブロックのON/OFFを定義しておき, JavaScriptではclass属性を書き換えて各種アニメーションをトリガするようにすると, スタイルシートとスクリプトの役割分担ができてコードがすっきりします.

例を示します.

HTML

1<div id="imgs" class="a"> 2 <img class="a" src="a.jpg"/> 3 <img class="b" src="b.jpg"/> 4 <img class="c" src="c.jpg"/> 5 <div class="a">コメントA</div> 6 <div class="b">コメントB</div> 7 <div class="c">コメントC</div> 8</div> 9<div id="inputs"> 10 <input type="button" value="1"/> 11 <input type="button" value="-1"/> 12</div>

CSS

1#imgs{ 2 position: relative; 3 width: 100%; height: 500px; 4} 5#imgs>img{ 6 opacity: 0; 7 transition: opacity 1s linear; 8 position: absolute; 9 width: 100%; height: 100%; 10 object-fit: cover; 11} 12#imgs.a>img.a, 13#imgs.b>img.b, 14#imgs.c>img.c{ 15 opacity: 1; 16} 17#imgs>div{ 18 display: none; 19 position: absolute; 20 width: 200px; height: 200px; 21 bottom: 100px; right: 100px; 22 background-color: yellow; 23 z-index: 1; 24} 25#imgs.a>div.a, 26#imgs.b>div.b, 27#imgs.c>div.c{ 28 display: block; 29}

JavaScript

1"use strict"; 2{ 3 const classes = [].map.call(imgs.querySelectorAll("img"), img => img.className); 4 inputs.onclick = e => { 5 const current = classes.indexOf(imgs.className); 6 const next = (current + (+e.target.value) + classes.length) % classes.length; 7 imgs.className = classes[next]; 8 }; 9}

投稿2018/04/09 01:56

defghi1977

総合スコア4756

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

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

MeB

2018/04/10 01:43

ご返信が遅くなってしまい申し訳ございません。 これに質問の中にある自動で切り替わる処理を追加することはかのうでしょうか?
guest

0

ライブラリを探せばよいのでは。
コードの勉強をされているのであれば、HTMLにクリックできる物を用意して、クリックしたらchange関数を実行するようにすればとりあえず切り替わると思います。

投稿2018/04/09 01:10

kei344

総合スコア69407

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

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

MeB

2018/04/10 01:48 編集

今の処理に関数追加ということで認識であっていますでしょうか?
kei344

2018/04/10 01:46

「認識はいっていますでしょうか?」とは?
MeB

2018/04/10 01:48

すみません。訂正しました。
kei344

2018/04/10 01:54

「関数追加」が「今のコードを大きく変えずに実装できるか」と言う意味なら、たぶん出来ると思います。
MeB

2018/04/10 01:56

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問