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");
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) {