ユーザーがクリックを再生できるようにチャートを作成しようとすると、年単位で循環し、次のチャートに移動する前にチャートに数秒間表示されます。
また、ユーザーがアニメーションを一時停止してクリックすることを許可する必要があります。これは私が失敗しているところです。jQuery setTimeout関数の実行を停止しない
私の問題は範囲指定されていますが、100%ではありません。アニメーションが繰り返される場所に移動しますが、ユーザーが一時停止をクリックすると、アニメーションを一時停止させずに繰り返し再生されます。 clearInterval
がconsole.log
で発生しているのがわかりますが、もう一度、何もせずにアニメーションが続行されます。
私はを使用して、各チャートの表示を遅らせ、間違った方法で(確かに間違って)setInterval
を使用してループをスケジュールします。私はsetTimeout
とsetInterval
を扱っていますが、役に立たないものはたくさんあります。私は彼らがなぜ働かないのか、私の質問は他の人と "違う"のではないという理解が不足していることが肯定的です。
私は3日間私の机の上で頭を叩いていて、実際にここでいくつかの指針を使うことができたと言いました。以下は、私は現在で働いていたJavaScript/jQueryのは、次のとおりです。
jQuery('#animation-play').on('click', function() {
// loopThroughYears();
var animation;
if (jQuery('#animation-play').hasClass('play')) {
jQuery('#animation-play').addClass('stop').removeClass('play').text('Pause Animation');
var years = [2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015];
var time = 1000;
if (animation) {
clearInterval(animation);
}
animation = setInterval(function() {
$.each(years, function(index, values) {
setTimeout(function() {
if (years.this < 2016) {
selectChartYear(values);
jQuery("#chart-years").val(values);
}
}, time);
});
}, time);
} else {
jQuery('#animation-play').addClass('play').removeClass('stop').text('Play Animation');
console.log("Timeout Cleared!");
clearInterval(animation);
}
});
おかげで要素上のインスタンスのために、どこかにその変数を格納する必要があるだろう。それは実際にはそれを止めませんし、一度それが終わると、本質的に無限ループを再開します。 – albert
ああ、私は、あなたは一度実行して停止し、クリックなどで再開したいですか?あなたは本当に近くではない、おそらくこれ以上のものがほしいと思う - > ** https://jsfiddle.net/a894np6L/** – adeneo
とても近い。年がなくなるまで働く。それは再生されます。ユーザーが一時停止できるようにします。再生が再びクリックされると、2015年以降に "Uncaught TypeError:nullの"プロパティ23 'を読み取れません。これはselectChartYears()関数の変数です。 – albert