ui/components-web-view.js: Use ResizeObserver for watching pref height
Rather than guessing when the height might change by using a number of different event listeners, use a ResizeObserver to get direct notifications of any changes to the HTML element's size.
This commit is contained in:
parent
e15ece2cde
commit
01a0f96b40
1 changed files with 5 additions and 49 deletions
|
|
@ -41,7 +41,12 @@ PageState.prototype = {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.heightObserver = new ResizeObserver((entries) => {
|
||||||
|
state.updatePreferredHeight();
|
||||||
|
});
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", function(e) {
|
document.addEventListener("DOMContentLoaded", function(e) {
|
||||||
|
state.heightObserver.observe(window.document.documentElement);
|
||||||
state.loaded();
|
state.loaded();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -49,55 +54,6 @@ PageState.prototype = {
|
||||||
state.selectionChanged();
|
state.selectionChanged();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Coalesce multiple calls to updatePreferredHeight using a
|
|
||||||
// timeout to avoid the overhead of multiple JS messages sent
|
|
||||||
// to the app and hence view multiple resizes being queued.
|
|
||||||
let queueTimeout = null;
|
|
||||||
let queuePreferredHeightUpdate = function() {
|
|
||||||
if (queueTimeout != null) {
|
|
||||||
clearTimeout(queueTimeout);
|
|
||||||
}
|
|
||||||
queueTimeout = setTimeout(
|
|
||||||
function() { state.updatePreferredHeight(); }, 100
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Queues an update when the complete document is loaded.
|
|
||||||
//
|
|
||||||
// Note also that the delay introduced here by this last call
|
|
||||||
// to queuePreferredHeightUpdate when the complete document is
|
|
||||||
// loaded seems to be important to get an accurate idea of the
|
|
||||||
// final document size.
|
|
||||||
window.addEventListener("load", function(e) {
|
|
||||||
queuePreferredHeightUpdate();
|
|
||||||
}, true); // load does not bubble
|
|
||||||
|
|
||||||
// Queues updates for any STYLE, IMG and other loaded
|
|
||||||
// elements, hence handles resizing when the user later
|
|
||||||
// requests remote images loading.
|
|
||||||
document.addEventListener("load", function(e) {
|
|
||||||
queuePreferredHeightUpdate();
|
|
||||||
}, true); // load does not bubble
|
|
||||||
|
|
||||||
// Queues an update if the window changes size, e.g. if the
|
|
||||||
// user resized the window. Only trigger when the width has
|
|
||||||
// changed however since the height should only change as the
|
|
||||||
// body is being loaded.
|
|
||||||
let width = window.innerWidth;
|
|
||||||
window.addEventListener("resize", function(e) {
|
|
||||||
let currentWidth = window.innerWidth;
|
|
||||||
if (width != currentWidth) {
|
|
||||||
width = currentWidth;
|
|
||||||
queuePreferredHeightUpdate();
|
|
||||||
}
|
|
||||||
}, false); // load does not bubble
|
|
||||||
|
|
||||||
// Queues an update when a transition has completed, e.g. if the
|
|
||||||
// user resized the window
|
|
||||||
window.addEventListener("transitionend", function(e) {
|
|
||||||
queuePreferredHeightUpdate();
|
|
||||||
}, false); // load does not bubble
|
|
||||||
|
|
||||||
this.testResult = null;
|
this.testResult = null;
|
||||||
},
|
},
|
||||||
getPreferredHeight: function() {
|
getPreferredHeight: function() {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue