関数のwindow.setinterval
後に 2 つの if 条件を記述しました。Firefox、Opera、IE で思い通りに動作します。Webkit エンジンでは、関数は引き継がれません。
x = window.setInterval(function() {
if(a.speed >= a.maxSpeed && b.speed >= b.maxSpeed && c.speed >= c.maxSpeed) {
a.stop();
b.stop();
c.stop();
}
if(a.speed === 0 && b.speed === 0 && c.speed === 0 && completed === 3) {
window.clearInterval(x);
enableControl();
printResult();
enableControl();
}
}, 100);
最大速度に達したときに停止機能を呼び出し、速度が 0 の場合に結果を表示する間隔を設定しました。Mozilla、IE、Opera では、私が望んでいたとおりに動作します。しかし、webkit では、最初の if 条件自体が実行されていません。無限ループが実行されています。
最初のif条件が実行されていない場合でも、ネストされたifも試しました。この問題の解決を手伝ってください。
これが正しいアプローチでない場合、タイムアウトをトリガーしc.stop()
、手動で a、b、c の速度を 0 にしてから、コントロールを有効にして結果を表示できますか?
これはあなたが求めた停止機能です:
Slot.prototype.stop = function() {
var _this = this,
limit = 30;
clearInterval(_this.si);
_this.si = window.setInterval(function() {
if(_this.speed > limit) {
_this.speed -= _this.step;
$(_this.el).spSpeed(_this.speed);
}
if(_this.speed <= limit) {
_this.finalPos(_this.el);
$(_this.el).spSpeed(0);
$(_this.el).spStop();
clearInterval(_this.si);
$(_this.el).removeClass('motion');
_this.speed = 0;
}
}, 100);
};