starting to preload in both directions

This commit is contained in:
Bala Clark 2011-09-14 18:03:35 +02:00
parent a53be3b441
commit 458527a62a

View file

@ -455,58 +455,55 @@ function ComicBook(id, srcs, opts) {
this.showControl("loadingOverlay"); this.showControl("loadingOverlay");
var i = pointer; // the current page counter for this method 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(); var page = new Image();
$("#cb-status").text("loading page " + (i + 1) + " of " + no_pages);
page.src = srcs[i]; page.src = srcs[i];
page.onload = function () { page.onload = function () {
pages[i] = this; pages[i] = this;
loaded.push(i); loaded.push(i);
$("#cb-status").text("loaded page " + (i + 1) + " of " + no_pages);
// start to load from the beginning if loading started midway // TODO: put back in the page render code, page request code
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") }
}; };
} }
// manually trigger the first load // Loads the pages at a rate of 3 forward, 1 back. This should make scrolling
preload(i); // 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) { ComicBook.prototype.pageLoaded = function (page_no) {
@ -631,7 +628,7 @@ function ComicBook(id, srcs, opts) {
ComicBook.prototype.enhance[action](options); 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 ? (pointer+1) + "-" + (pointer+2) : pointer+1
$("#cb-current-page").text(current_page); $("#cb-current-page").text(current_page);