Ich habe eine WordPress-Website, für die ich einen Plugin-Slider für gemacht habe.clearTimeout vs setInterval
Ich möchte die setTimeout auf Hover pausieren und fortsetzen oder zurücksetzen bei Mouseout.
Mein Code ist ein wenig unordentlich geworden, da ich Sachen hinzugefügt habe, während ich gehe.
Ich denke, ich hätte die setInterval-Methode verwenden sollen, aber ich bin mir nicht sicher.
Die Seite ist auf **
und hier ist meine JS-Datei:
$(document).ready(function(){
addActive();
})
function addActive(){
$time = constants.transition;
$delay = constants.delay+'000';
$control = constants.control;
var $change = $($control);
console.log($time);
console.log($delay);
console.log($control);
var $slider = $('.slider-plus');
var $value1 = $slider.find('li:nth-child(1) .sas-values').html();
$('.slider-plus li:nth-child(1)').addClass('active').css({'z-index':'1','opacity':'1'});
$change.html($value1);
setTimeout(translate1, $delay);
function translate1(){
var $change = $($control);
var $value2 = $slider.find('li:nth-child(2) .sas-values').html();
$slider.find('li:nth-child(3)').removeClass('translate');
$slider.find('li:nth-child(1)').removeClass('active').addClass('translate').animate({'z-index':'0','opacity':'0'},$time);
$slider.find('li:nth-child(2)').addClass('active').animate({'z-index':'1','opacity':'1'},$time);
$change.html($value2);
if ($slider.find('li:nth-child(2)').hasClass('active')) {
$slider.hover(function(){
clearTimeout($(this).data('timeout'));
}, function(){
setTimeout(translate2, $delay);
});
}
}
function translate2(){
var $change = $($control);
var $value3 = $slider.find('li:nth-child(3) .sas-values').html();
$slider.find('li:nth-child(1)').removeClass('translate');
$slider.find('li:nth-child(2)').removeClass('active').addClass('translate').animate({'z-index':'0','opacity':'0'},$time);
$slider.find('li:nth-child(3)').addClass('active').animate({'z-index':'1','opacity':'1'},$time);
$change.html($value3);
setTimeout(translate3, $delay);
}
function translate3(){
var $change = $($control);
var $value3 = $slider.find('li:nth-child(3) .sas-values').html();
$slider.find('li:nth-child(2)').removeClass('translate');
$slider.find('li:nth-child(3)').removeClass('active').addClass('translate').animate({'z-index':'0','opacity':'0'},$time);
$slider.find('li:nth-child(1)').addClass('active').animate({'z-index':'1','opacity':'1'},$time);
$change.html($value1);
setTimeout(translate1, $delay);
}
}
Vielen Dank für jede Hilfe, Matt
Was auch immer Sie mit diesem Code verwenden, ist falsch. Sie sollten sich an die DRY-Prinzipien (wiederholen Sie sich nicht) gewöhnen. Kopieren-Einfügen-Code ist ein Albtraum und ist nicht flexibel. Ihre Schiebereglerlogik sollte mit dem kleinstmöglichen ** Code arbeiten ** unabhängig von der Anzahl der Folien, die Sie in HTML verwendet haben. –
Danke Roko. Ich stimme zu. Ich muss das Ding nacharbeiten. –