diff --git a/lib/ComicBook.js b/lib/ComicBook.js index a1f1962..fb06147 100755 --- a/lib/ComicBook.js +++ b/lib/ComicBook.js @@ -455,58 +455,55 @@ function ComicBook(id, srcs, opts) { this.showControl("loadingOverlay"); var i = pointer; // the current page counter for this method - var rendered = false; - - // I am using recursion instead of a forEach loop so that the next image is - // only loaded when the previous one has completely finished - function preload(i) { + function loadImage(i) { +console.log(i); var page = new Image(); - - $("#cb-status").text("loading page " + (i + 1) + " of " + no_pages); - page.src = srcs[i]; page.onload = function () { - pages[i] = this; loaded.push(i); + $("#cb-status").text("loaded page " + (i + 1) + " of " + no_pages); - // start to load from the beginning if loading started midway - if (i === no_pages-1 && loaded.length !== no_pages) { - i = -1; - } - - // there are still more pages to load, do it - if (loaded.length < no_pages) { - i++; - preload(i); - } - - // double page mode needs an extra page added - var buffer = (options.displayMode === "double" && pointer < srcs.length-1) ? 1 : 0; - - // start rendering the comic when the requested page is ready - if ((rendered === false && ($.inArray(pointer + buffer, loaded) !== -1) - || - (typeof page_requested === "number" && $.inArray(page_requested, loaded) !== -1)) - ) { - // if the user is waiting for a page to be loaded, render that one instead of the default pointer - if (typeof page_requested === "number") { - pointer = page_requested-1; - page_requested = false; - } - - ComicBook.prototype.drawPage(); - ComicBook.prototype.hideControl("loadingOverlay"); - rendered = true; - } - if (loaded.length === no_pages) { ComicBook.prototype.hideControl("status") } + // TODO: put back in the page render code, page request code }; } - // manually trigger the first load - preload(i); + // Loads the pages at a rate of 3 forward, 1 back. This should make scrolling + // pages in both directions faster. + function preload(start, stop) { + + var forward_buffer = 3; + + var count = 2; + var forward = start+1; + var backward = start-1; + + // always load the first requested image first + // TODO: remove the need for this? + loadImage(start); + + while (forward <= stop) { + + if (count > forward_buffer && backward > -1) { + loadImage(backward); + backward--; + count = 0; + } else { + loadImage(forward); + } + forward++; + count++; + } + + while (backward > -1) { + loadImage(backward); + backward--; + } + } + + preload(i, srcs.length-1); }; ComicBook.prototype.pageLoaded = function (page_no) { @@ -631,7 +628,7 @@ function ComicBook(id, srcs, opts) { ComicBook.prototype.enhance[action](options); }); - var current_page = (options.displayMode === "double" && pointer+2 <= srcs.length) + var current_page = (options.displayMode === "double" && pointer+2 <= srcs.length) ? (pointer+1) + "-" + (pointer+2) : pointer+1 $("#cb-current-page").text(current_page);