1
0
Fork 0
mirror of https://github.com/futurepress/epub.js.git synced 2025-10-03 14:59:18 +02:00

fix(iframe-view): can't turn pages after changing window size

This commit is contained in:
NoraH1to 2023-05-20 01:36:00 +08:00
parent f09089cf77
commit 0caaf5f3da
2 changed files with 23 additions and 6 deletions

View file

@ -77,9 +77,8 @@ class Views {
} }
destroy(view) { destroy(view) {
if(view.displayed){ // Just destroy it.
view.destroy(); view.destroy();
}
if(this.container){ if(this.container){
this.container.removeChild(view.element); this.container.removeChild(view.element);

View file

@ -6,7 +6,16 @@ import { EVENTS } from "../../utils/constants";
import { Pane, Highlight, Underline } from "marks-pane"; import { Pane, Highlight, Underline } from "marks-pane";
class IframeView { class IframeView {
/**
* One section only have one View,
* we can put them into the map to destroy the old one.
*/
static ViewMap = new Map();
constructor(section, options) { constructor(section, options) {
const oldView = IframeView.ViewMap.get(section.href);
if (oldView) oldView.destroy();
IframeView.ViewMap.set(section.href, this);
this.settings = extend({ this.settings = extend({
ignoreClass : "", ignoreClass : "",
axis: undefined, //options.layout && options.layout.props.flow === "scrolled" ? "vertical" : "horizontal", axis: undefined, //options.layout && options.layout.props.flow === "scrolled" ? "vertical" : "horizontal",
@ -48,6 +57,7 @@ class IframeView {
this.highlights = {}; this.highlights = {};
this.underlines = {}; this.underlines = {};
this.marks = {}; this.marks = {};
this.loading = undefined;
} }
@ -158,7 +168,6 @@ class IframeView {
return this.load(contents); return this.load(contents);
}.bind(this)) }.bind(this))
.then(function(){ .then(function(){
// find and report the writingMode axis // find and report the writingMode axis
let writingMode = this.contents.writingMode(); let writingMode = this.contents.writingMode();
@ -382,7 +391,8 @@ class IframeView {
load(contents) { load(contents) {
var loading = new defer(); this.loading && this.loading.reject('cancel');
var loading = this.loading = new defer();
var loaded = loading.promise; var loaded = loading.promise;
if(!this.iframe) { if(!this.iframe) {
@ -841,6 +851,14 @@ class IframeView {
this._height = null; this._height = null;
} }
/**
* Make sure the promise doesn't get stuck in pending,
* This avoids queue blocking.
*/
if (this.loading) {
this.loading.reject('cancel');
}
// this.element.style.height = "0px"; // this.element.style.height = "0px";
// this.element.style.width = "0px"; // this.element.style.width = "0px";
} }