由於目前還不清楚發生了什麼事我做了一個視頻:清除JavaScript調用堆棧
正如你可以看到,在年底之前,它只是滾動和顯示接觸點(該工具崩潰動畫圈)爲每個touchevent。我只是想清除堆棧,所以這不會發生。
我正在爲觸摸屏電腦構建一個非常緩慢的JavaScript工具。這麼慢,當你在少量時間(比如1秒)使用你的手觸發100多個觸發器時,計算機開始執行每個觸摸事件。
由於執行一次touchevent已經花費了幾百毫秒,所以該工具在大約一分鐘內不可用。
我已經寫了這個劇本阻止得多touchevents
'use strict';
var MultiTouch = Backbone.NativeView.extend({
el: document,
initialize: function() {
console.log('Init MultiTouch');
this.el.addEventListener('touchstart', function(e) {
this.touchstartHandler(e);
}.bind(this));
},
touchstartHandler: function (e) {
if (this.block) {
console.log("block");
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
return;
}
console.log("no block");
this.startTimer();
},
startTimer: function() {
this.block = true;
setTimeout(function() {
this.block = false;
}.bind(this), 300);
}
});
module.exports = MultiTouch;
這還是因爲我的工具仍然超載很容易不阻止足夠的事件。
有沒有辦法清空整個調用堆棧,以便我的機器不會連續執行100多個函數?
謝謝。
編輯
我更新了我的腳本一點,並增加了兩個控制檯日誌。這是我從鋪設了我的手在觸摸屏上得到:
no block MultiTouch.js:31
17 block MultiTouch.js:23
no block MultiTouch.js:31
19 block MultiTouch.js:23
no block MultiTouch.js:31
12 block MultiTouch.js:23
no block MultiTouch.js:31
20 block MultiTouch.js:23
no block MultiTouch.js:31
7 block MultiTouch.js:23
no block MultiTouch.js:31
8 block MultiTouch.js:23
no block MultiTouch.js:31
6 block MultiTouch.js:23
no block MultiTouch.js:31
9 block MultiTouch.js:23
2 no block MultiTouch.js:31
9 block MultiTouch.js:23
no block MultiTouch.js:31
7 block MultiTouch.js:23
no block MultiTouch.js:31
5 block MultiTouch.js:23
no block MultiTouch.js:31
7 block MultiTouch.js:23
no block MultiTouch.js:31
6 block MultiTouch.js:23
no block MultiTouch.js:31
11 block MultiTouch.js:23
no block MultiTouch.js:31
3 block MultiTouch.js:23
所以把一隻手在屏幕上觸發更多然後170個touchevents。移動你的手將觸發成千上萬的touchevent,這將完全崩潰我的電腦。我怎樣才能防止這種情況發生?
EDIT 2
其中anwsers的說: '你可以忽略大部分的事件。'。情況並非如此。當數以千計的事件被稱爲我的電腦崩潰,所以我不能'忽略'他們。
這個問題的整個觀點是讓我的電腦不會崩潰。每個touchstart都有多個函數在監聽,所以每個touchstart事件都會執行多個函數。
由於這些函數需要幾百毫秒才能執行,因此該工具會持續執行幾分鐘的函數,使其無法使用。
問題是,這臺電腦太慢了,他只是'記得'所有的輸入已經輸入,甚至當你這樣做了一分鐘前,它仍然忙於其他的東西。所以你只需看到該工具在沒有人觸摸屏幕時自動滾動。
如果還不清楚發生了什麼,我會記錄下來並將其放到網上。