Самое простое решение для вас - добавить простое:
$(slides).hide()
, когда вы достигли slides.length.
Более интуитивное и "более простое" решение, на мой взгляд, использует асинхронное соединение. Вместо этого c.
$(document.ready(() => {
let slides = $('slider>li>img');
$(slides).hide();
// Calling loop without await causes it to run without blocking the main function
loop(slides, 1000);
})
const loop = async (slides, duration) => {
slides.forEach(slide => {
$(slide).show();
// sleep for duration ms
await new Promise(r => setTimeout(r, duration));
}
// After looping through all slides, hide them
$(slides).hide();
}
Если вы хотите, чтобы l oop через функцию "l oop" бесконечно, вы можете создать новую асин * c функцию:
const looploop = async (slides, duration) => {
// Using the await keyword will wait for the loop function to finish,
// And only then will it call it again.
// The trick here is that the waiting is in the async function scope
// so if you were to call looploop without await in the main function
// it wouldn't block it.
while(true) {
await loop(slides, duration);
}
}
Asyn c программирование в js преобразует ваши представления о долгосрочных задачах, таких как эта. Это позволяет вам писать неблокирующие функции итеративным способом, заставляя его становиться «простым» и «легким».