Using addEventListener/removeEventListener

This commit is contained in:
Artur Adib 2012-01-12 09:16:03 -05:00
parent fcdf266d8e
commit 504d9f12c1

View File

@ -962,9 +962,11 @@ var TextLayerBuilder = function textLayerBuilder(textLayerDiv) {
var textLayerDiv = this.textLayerDiv; var textLayerDiv = this.textLayerDiv;
var renderTimer = null; var renderTimer = null;
var renderingDone = false; var renderingDone = false;
var renderInterval = 0;
var resumeInterval = 500; // in ms
// Render the text layer, one div at a time // Render the text layer, one div at a time
var renderTextLayer = function textLayerRender() { function renderTextLayer() {
if (textDivs.length === 0) { if (textDivs.length === 0) {
clearInterval(renderTimer); clearInterval(renderTimer);
renderingDone = true; renderingDone = true;
@ -980,21 +982,16 @@ var TextLayerBuilder = function textLayerBuilder(textLayerDiv) {
(textDiv.dataset.textLength - 1)) + 'px'; (textDiv.dataset.textLength - 1)) + 'px';
} }
} }
renderTimer = setInterval(renderTextLayer, 0); renderTimer = setInterval(renderTextLayer, renderInterval);
var scrollTimer = null;
if (window.onscroll)
var oldScrollHandler = window.onscroll;
// Stop rendering when user scrolls. Resume after XXX milliseconds // Stop rendering when user scrolls. Resume after XXX milliseconds
// of no scroll events // of no scroll events
window.onscroll = function textLayerOnScroll() { var scrollTimer = null;
if (oldScrollHandler) function textLayerOnScroll() {
oldScrollHandler.apply(window, arguments); if (renderingDone) {
window.removeEventListener('scroll', textLayerOnScroll, false);
// This avoids handler wrapper bloat return;
if (renderingDone) }
window.onscroll = oldScrollHandler;
// Immediately pause rendering // Immediately pause rendering
clearInterval(renderTimer); clearInterval(renderTimer);
@ -1002,10 +999,12 @@ var TextLayerBuilder = function textLayerBuilder(textLayerDiv) {
clearTimeout(scrollTimer); clearTimeout(scrollTimer);
scrollTimer = setTimeout(function() { scrollTimer = setTimeout(function() {
// Resume rendering // Resume rendering
renderTimer = setInterval(renderTextLayer, 0); renderTimer = setInterval(renderTextLayer, renderInterval);
}, 500); }, resumeInterval);
} }; // textLayerOnScroll
};
window.addEventListener('scroll', textLayerOnScroll, false);
}; // endLayout
this.appendText = function textLayerBuilderAppendText(text, this.appendText = function textLayerBuilderAppendText(text,
fontName, fontSize) { fontName, fontSize) {