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");
|
||||
|
||||
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);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue