在下面的代碼中,我必須介紹setTimeOut()
以在第一個函數完全結束之前停止第二個函數的運行(請參閱filterMovies()
的底部)。在此之前,我試圖使用最終迭代調用回調(在我的情況下,相同的代碼減去setTimeOut()
和持續時間),但它仍然會在第一個代碼完全執行之前運行。在JavaScript中有沒有比setTimeout更好的東西?
我認爲這是因爲我正在處理幾百個$(".movie")
元素(雖然我不太清楚)。
setTimeOut()
工作正常,但它在頁面上的編碼和性能(延遲後的文本更新)方面似乎不雅。在更好的編碼實踐的精神,有沒有說「哎,updateSearchInfo
,甚至不考慮運行,直到後非常最後一個元素要麼向上滑動或下滑?
function filterMovies() {
$(".movie").each(function(i) {
var movie = $(this);
var genreMatch =
!chosenGenres.length
? true
: chosenGenres.every(elem => movie.find(".genre").text().indexOf(elem) !== -1);
var directorMatch =
!chosenDirectors.length
? true
: chosenDirectors.every(elem => movie.find(".director").text().indexOf(elem) !== -1);
var countryMatch =
!chosenCountries.length
? true
: chosenCountries.every(elem => movie.find(".countries").text().indexOf(elem) !== -1);
i === $(".movie").length -1
? genreMatch && directorMatch && countryMatch
? movie.slideDown(setTimeout(function() {updateSearchInfo()}, 1000))
: movie.slideUp(setTimeout(function() {updateSearchInfo()}, 1000))
: genreMatch && directorMatch && countryMatch
? movie.slideDown()
: movie.slideUp();
});
}
function updateSearchInfo() {
movieCount = $(".movie:visible").length;
$("#search-info").text("Showing " + movieCount + " movies.");
}
感謝的更有效的方法!提前
jQuery的動畫通常有兩個參數,持續時間和回調完成時 - 你所傳遞是一個數字(是的,setTimeout的結果是一個數字),所以它使用的時間.. 。試試'movie.slideUp(updateSearchInfo)'等 –