まず、この質問の複雑さをお詫びしましょう。複雑さが原因の一部である可能性があるので、もっと簡単にそれを分解することはできません。しかし、このロジックは、ページのアクティブリンクを点灯させ、ちらつきを生じさせます。JS変数がターボリンクで新しいページに「つぶれて」来る
ターボリンクを使用すると、最初のページですべて正常に動作しますが、別のページに切り替えると、物事が始まります。前のページのactive
のクラスを以前に持っていたリンクは、active
のクラスを持たなくても、active
の引数がtrue
であることを引き続き示しています。
turbolinksを無効にすると、すべて正常に動作します。
function flicker(elem, active) {
var delay = Math.random() * (2000) + 130;
console.log($(elem).data('name') + ": " + active + ': ' + $(elem).hasClass('active'));
if (active == true) {
// We need specific timers for each link so each can operate with its own
// separate "thread" and be toggled independently of the others.
// Using window['foo'] to handle dynamic variable names.
window['timer-' + $(elem).data('name')] = setTimeout(function() {
window.setTimeout(function() {
$(elem).addClass('powered');
}, 20) // Controls length of flicker.
flicker(elem, true);
$(elem).removeClass('powered');
}, delay);
} else {
clearTimeout(window['timer-' + $(elem).data('name')]);
}
};
$(document).on('turbolinks:load', function() {
// Initiate the current, active link.
$('.navbar a.active').each(function() {
window['timer-' + $(this).data('name')]; // Instantiating dynamic variable.
flicker($(this), $(this).hasClass('active'));
});
});
私と一緒にいてください。ですから、最初のページの3行目にコンソールログがあり、それが期待どおりに出力されます。例えば:
nav-1: true: true
繰り返し行1から第リンクactive
引数はtrue
であり、それはtrue
のクラスを有することをことを示し、各フリッカと出力を取得します。
しかし、私は次のページに行くために2番目のリンクをクリックすると、コンソールが繰り返しログに記録します。
nav-1: true: true
nav-2: true: true
にもかかわらず、このような場合には、nav-1
が行うないはactive
のクラスを持っています。