starting to preload in both directions
This commit is contained in:
parent
a53be3b441
commit
458527a62a
1 changed files with 39 additions and 42 deletions
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue