Возможно, что вы хотите, чтобы централизовать все, что происходит на этой странице и использовать requestAnimationFrame, чтобы сделать все рисунок. Поэтому в основном вы бы функция/класс, который выглядит примерно так (вы должны простить некоторые/синтаксические ошибки стиля Привык классы Mootools, просто принять это как контур)
var Main = function(){
this.queue = [];
this.actions = {};
requestAnimationFrame(this.loop)
}
Main.prototype.loop = function(){
while (this.queue.length){
var action = this.queue.pop();
this.executeAction(e);
}
//do you rendering here
requestAnimationFrame(this.loop);
}
Main.prototype.addToQueue = function(e){
this.queue.push(e);
}
Main.prototype.addAction = function(target, event, callback){
if (this.actions[target] === void 0) this.actions[target] = {};
if (this.actions[target][event] === void 0) this.actions[target][event] = [];
this.actions[target][event].push(callback);
}
Main.prototype.executeAction = function(e){
if (this.actions[e.target]!==void 0 && this.actions[e.target][e.type]!==void 0){
for (var i=0; i<this.actions[e.target][e.type].length; i++){
this.actions[e.target][e.type](e);
}
}
}
Так в основном вы должны использовать этот класс для обработки всего, что происходит на странице. Каждый обработчик событий будет onclick='Main.addToQueue(event)'
или, тем не менее, вы хотите добавить свои события на свою страницу, просто укажите им, чтобы добавить событие в реплику, и просто используйте Main.addAction, чтобы направить эти события на то, что вы хотите, чтобы они делали. Таким образом, каждое действие пользователя выполняется, как только ваш холст будет завершен, и прежде чем он снова будет перерисован. До тех пор, пока ваш холст окажется на достойной частоте кадров, ваше приложение должно оставаться отзывчивым.
EDIT: забыл «это» в requestAnimationFrame (this.loop)
Это потому, что большинство браузеров не допускают интервал javascript 0мс. Они закрывают его в 20 мс или что-то в этом роде. –
Это похоже на довольно плохую идею в целом, но, возможно, не для ваших целей.Можете ли вы рассказать нам о том, что делает ваш код, который вы используете постоянно? – hobberwickey
@hobberwickey: Это рендеринг графики на холсте и нацелен на максимально возможную частоту кадров. – dragonroot