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

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

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

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

3回答

1867閲覧

jQueryでの画像のスライドショーについて

otya

総合スコア19

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2015/09/17 11:30

編集2015/09/17 11:31

otyaと申します。

jqueryでプラグインは使わずにスライドショーを行うプログラムを考えています。
下記の変数aに代入される数字を1ずつ増やしたいです。
しかし、

jquery

1$(function(){ 2 var a = 1; //画像ファイルの数字 3 4 //スライドショーを行う関数 5 function abc(){ 6 $(".test").attr("src", "画像のパス" + a + ".jpg"); //画像をattr()メソッドで変更 7 $(".test").fadeIn("slow"); 8 $(".test").fadeOut("slow"); 9} 10 11 abc(); //実行 12});

上記のようにattrメソッドで画像を変えて実行するところまでは出来ましたが、

jquery

1$(function(){ 2 var a = 1; //画像ファイルの数字 3 4 //スライドショーを行う関数 5 function abc(){ 6 $(".test").attr("src", "画像のパス" + a + ".jpg"); //画像をattr()メソッドで変更 7 $(".test").fadeIn("slow"); 8 $(".test").fadeOut("slow"); 9} 10 11 abc(); //実行 12 a++; 13 abc(); //実行 14});

というふうに書くと、最初の関数実行時から変数aに2が代入されてしまいます。

また、

jquery

1$(function(){ 2 var a = 1; //画像ファイルの数字 3 4 //スライドショーを行う関数 5 function abc(){ 6 $(".test").attr("src", "画像のパス" + a + ".jpg"); //画像をattr()メソッドで変更 7 $(".test").fadeIn("slow"); 8 $(".test").fadeOut("slow"); 9 a++; 10 abc(); 11} 12 13 abc(); //実行 14});

と書くと、想像では変数aの中の数字が増えながらabc関数が実行されるのですが、現実では変数aの数字が増えないままabc関数が実行されます。

変数aの数字を増やして画像を順に表示させたいのですが、変数aの数字を増やすにはどこを改善したらいいのでしょうか?

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

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

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

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

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

guest

回答3

0

明言されていませんが、恐らくページの更新無しに、一定時間毎にスライドを入れ替えたいんですよね?
そういう時は setIntervalで良いかと思います。
とりあえずはこんな感じで動くのじゃないでしょうか?
※一番最初のコードで 「abc(); //実行」の所を

javascript

1setInterval(function(){ 2 abc(); 3 a++; 4 },10000); //10秒ごとに切り替え

投稿2015/09/17 14:19

hirohiro

総合スコア2068

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

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

otya

2015/09/18 07:35

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

0

ベストアンサー

とりあえず、ひとつ目の例は「エフェクトが実行される前にa=1とa=2の状態のattr変更が実行されてます。
jQueryのエフェクトは非同期に実行されてますので、fadeInメソッドなどが終わる前にabc関数の実行が終わってしまうんです。ですので、a=1でのfadeInメソッドが終わる前にa++が実行されます。関数の最後にでもalert();を挿入してみると分かりやすいかもしれません。

ふたつ目の結果も同様だと思います。こちらは無限ループになっていますから、a=1でのfadeInメソッドが終わる前にaはとても大きな数になっているはずです。そしてsrc要素が書き換えられ続けているので画像が差し変わるレンダリングがされないのではないかと思います。

追記
サンプル置いておきます。
http://jsfiddle.net/qsnfnou2/

javascript

1var a = 1; 2 3function abc(){ 4 $(".test").attr("src", "http://placehold.jp/200x200.png?text=" + a); 5 $.when($(".test").on('load')) 6 .then(function(){ 7 $(".test").fadeIn("slow"); 8 return $(".test").fadeOut("slow"); 9 }) 10 .then(function(){ 11 a++; 12 abc(); 13 }); 14} 15 16abc();

投稿2015/09/17 13:27

編集2015/09/18 04:48
Lhankor_Mhy

総合スコア36074

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

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

otya

2015/09/18 07:34

回答ありがとうございます。 詳しく説明していただき理解が出来ました。 サンプルまでありがとうございます。
guest

0

ふたつのimgタグを使って、fadein-outを交互にして見たサンプルです。
お役に立てれば。

html

1<div id="image" style="position: relative;"> 2 <img src="" style="position: absolute;top: 0;left: 0;" /> 3 <img src="" style="position: absolute;top: 0;left: 0;" /> 4</div> 5<script> 6 $(function(){ 7 8 var interval = 5000; // 画像切替タイミング(ミリ秒) 9 var img_cnt = 3; // 画像数 10 11 var a = 0, b = 0; 12 13 var $imgs = $('#image img'), 14 $img1 = $imgs.eq(0), 15 $img2 = $imgs.eq(1); 16 17 function abc(){ 18 a = b+1;if (a > img_cnt) a=1; 19 $img1.hide(); 20 $img1.attr("src", "[画像パス]" + a + ".jpg"); 21 $img1.fadeIn(interval, function() { 22 $img1.fadeOut(interval, function(){ 23 abc(); 24 }); 25 }); 26 } 27 28 function efg() { 29 $img2.fadeOut(interval, function() { 30 b = a+1;if (b > img_cnt) b=1; 31 $img2.attr("src", "[画像パス]" + b + ".jpg"); 32 $img2.fadeIn(interval, function(){ 33 efg(); 34 }); 35 }); 36 } 37 38 abc(); 39 efg(); 40 41 }); 42</script>

投稿2015/09/18 02:26

rk7fd3s

総合スコア61

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

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

otya

2015/09/18 07:36

回答ありがとうございます。 サンプルもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問