サムネイルの文字列を作成し、サムネイルのより大きなバージョンを表示し、4 秒ごとに次のサイクルに切り替えるギャラリー サイトがあります。ユーザーがサムネイルをクリックして特定の画像を選択できるように、クリック関数を作成しました。大きな「表示」画像は、ユーザーがクリックした画像にすぐに移行し、タイマーがリセットされます。ユーザーが「表示」画像にカーソルを合わせている間にスライドショーを一時停止し、mouseLeave でタイマーをリセットする機能を実装しようとしたときに、問題が発生しました。最終的に機能するようになりましたが、ユーザーがリンクをクリックして別のギャラリーをロードした後、特定の画像を選択するためのクリック機能が機能しなくなりました (合計で 5 つから選択できます)。ページの更新時に機能しますが、別のギャラリーが選択されてサムが読み込まれると機能しなくなります。以下は、スライドショー用の jQuery コードです。どこかで委任を逃したか、機能が正しく構成されていないのではないかと考えています。
$(document).ready(function(){
var timer = play()
function play() {
i = setInterval(advanceImage, 4000);
return i;
}
function pause() {
clearInterval(timer)
}
var gallery = drawings;
//Creates array variable based on what user clicks
$('.nav li a').click(function() {
$('#thumbs').children().remove();
gallery = window[this.id];
$.each(gallery, function(index, value){
$('#thumbs').append('<img src="'+value+'" />');
});
return;
});
//Adding images to thumbs
$.each(gallery, function(index, value){
$('#thumbs').append('<img src="'+value+'" />');
});
//Creates a current image from array
function currentImage(){
i = jQuery.inArray($('#current-img').attr('src'), gallery);
return i;
}
//Cycles through array
function advanceImage(){
currentImage();
if (i < gallery.length - 1){
changeImage(i + 1);
}else{
changeImage(0)
}
}
//Change current image to whatever i gives it
function changeImage(i){
$('#current-img').stop().animate({
opacity: 0,
}, 200, function(){
$('#current-img').attr('src', gallery[i]);
$('#slideshow-container img').load(function(){
$('#current-img').stop().animate({
opacity: 1,
}, 200)
})
})
}
//Clicking thumbnail function
$('#thumbs img').click(function(){
var newImage = $(this).attr('src');
$.each(gallery, function(index, value){
if (value == newImage){
changeImage(index);
};
});
clearInterval();
});
//Stop rotation on hover
$('#current-img').mouseenter(function() {
pause();
})
$('#current-img').mouseleave(resetInterval);
function resetInterval() {
timer = play();
}