への答えかもしれません。したがって、「自動的に」 ''をクリックするのではなく、コードが自動的に次の画像を表示するようにします。
だから、最初のステップは、click
ハンドラのうち、あなたのコードを移動することです:
function showImage(img){
$('div.feature-photo img').hide().attr('src',$(img).attr('src')).fadeIn();
}
$('#thumbs img').click(function() {
showImage(this);
});
そして質問は次のようになります。どのように私は、「次」の画像を5秒ごとshowImage
を呼んでください。さて、まず、 "現在"のイメージが何であるかを覚えておきましょう。それを行うために私たちのshowImage
を変更するのに十分な簡単:
var current = null;
function showImage(img){
current = img;
$('div.feature-photo img').hide().attr('src',$(img).attr('src')).fadeIn();
}
は、それでは我々だけトリガが5秒以内に発生する必要があります。あなたはです。を使用するとsetInterval
ですが、実際には制御不能になるのは簡単だから、代わりにsetTimeout
の連鎖シリーズを使用します。そして、それは何のための良いトリガーだろうか?ユーザーがshowImage
におそらく右が画像をクリックすると、その5秒後まあ、:
var current = null;
var timer = 0;
function showImage(img){
current = img;
$('div.feature-photo img').hide().attr('src',$(img).attr('src')).fadeIn();
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(nextImage, 5000);
}
わかりましたので、何がnextImage
のようになりますか?
function nextImage() {
var $current;
if (timer) {
clearTimeout(timer);
timer = 0;
}
if (current) {
$current = $(current);
next = $current.nextAll("img")[0];
if (!next) {
$current.siblings("img")[0];
}
if (next) {
showImage(next);
}
}
}
あなたが最初の画像を示すことによって最初に物事をキックオフがあります:私たちは、おそらく、おそらく、current
を使用したいと言うだろう
showImage($("#thumbs img")[0]);
だから、一緒にそのすべてもたらす、と確認し
(function() {
var current = null;
var timer = 0;
function showImage(img){
current = img;
$('div.feature-photo img').hide().attr('src',$(img).attr('src')).fadeIn();
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(nextImage, 5000);
}
function nextImage() {
var $current;
if (timer) {
clearTimeout(timer);
timer = 0;
}
if (current) {
$current = $(current);
next = $current.nextAll("img")[0];
if (!next) {
$current.siblings("img")[0];
}
if (next) {
showImage(next);
}
}
}
$('#thumbs img').click(function() {
showImage(this);
});
showImage($("#thumbs img")[0]);
})();
(またはその代わりにバニラスコープ機能の、あなたはjQueryのready
を使用する場合があります:私たちは、私たちは、グローバルシンボルを作成していないスコープ機能でそれをラップします。)
上記はかなり粗く、完全にテストされていませんが、あなたはそのアイディアを得ています。
でそれを見つけることができますか? imgは未定義ですね。 – devnull69
イェップ、そうだけど、それは問題ではない。 '$(img).click()'は何もしません。なぜなら、クリックされる要素がないからです。 'img'のインデックスは' -1'となり、次のインデックスは '0'になり、5秒後に最初の画像に切り替わります。だから、最初はやや遅いです.10秒後に2枚目の画像が表示されます。しかし、最初の呼び出しに引数として '$( '#thumbs img')[0]'を追加することができます。 – Tharabas