Deestanは正しいです、連続ループを実行します。あなたは無差別に新しいタイマーを作成していましたが、それはスピードアップを作成しているに違いありません。コードの簡略化されたバージョンは次のとおりです(http://jsfiddle.net/Ek5pQ/45/):
//the variables
var i = 1;
var myTimer;
function myLoop() {
//hide everything
$(".nHstuff").hide();
$(".nH").removeClass("active");
//show just the stuff we want
$("#nHstuff" + i).show();
$("#nH" + i).addClass("active");
//increment variables
i++;
if (i === 5) {
i = 1;
}
//the timer
myTimer = setTimeout(myLoop, 3000);
}
//start the loop
myLoop();
//what to do if hovered over an item
$(".nH").hover(function() {
clearTimeout(myTimer);
// clear content
$(".nHstuff").hide();
$(".nH").removeClass("active");
// show content
$("#nHstuff" + (this.id.substr(this.id.length - 1))).show();
});
$(".nH").mouseout(function() {
myLoop();
});
$(".nH").click(function() {
clearTimeout(myTimer);
i = this.id.substr(this.id.length - 1, 1);
//show just the stuff we want
$("#nHstuff" + i).show();
$("#nH" + i).addClass("active");
// To start looping again, call myLoop
});