以下のコードでは、最初の関数が完全に終了する前に、setTimeOut()
を実行して2番目の関数を停止しなければなりませんでした(filterMovies()
の下部を参照)。その前に、私は最終的な反復のみのコールバック(私の場合は同じコードからsetTimeOut()
を差し引いたもの)と両方を使用しようとしていましたが、最初のコードが完全に実行される前に実行されていました。JavaScriptにsetTimeoutより優れたものがありますか?
私はこれが何百という$(".movie")
要素を扱っているからです(実際には分かりませんが)。
setTimeOut()
でも問題はありませんが、ページ上でのコーディングとパフォーマンス(遅延後にテキストが更新されます)の両方でうまくいかないようです。より良いコーディング練習の精神には、その非常に最後の要素は、最大にスライドか?
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.");
}
感謝を滑り落ちたか後にちょっと、updateSearchInfo
は、さえまでランニングについて考えていない」というのが、より効率的な方法があります!事前に
jQueryのアニメーションは通常2つのパラメータ、デュレーションおよびコールバックを持っている - 何を渡していることは(はい、setTimeoutをした結果が数である)の数であるので、期間としてあることを利用しています。.. 。試してください 'movie.slideUp(updateSearchInfo)'など –