make browser resizing smoother / less expensive

This commit is contained in:
ed 2023-08-15 16:55:19 +00:00
parent f5407b2997
commit 18aa82fb2f
3 changed files with 67 additions and 7 deletions

View file

@ -2038,8 +2038,7 @@ var pbar = (function () {
t_redraw = setTimeout(r.drawpos, sm > 50 ? 20 : 50); t_redraw = setTimeout(r.drawpos, sm > 50 ? 20 : 50);
}; };
window.addEventListener('resize', r.onresize); onresize100.add(r.onresize, true);
r.onresize();
return r; return r;
})(); })();
@ -2101,8 +2100,7 @@ var vbar = (function () {
clearTimeout(untext); clearTimeout(untext);
untext = setTimeout(r.draw, 1000); untext = setTimeout(r.draw, 1000);
}; };
window.addEventListener('resize', r.onresize); onresize100.add(r.onresize, true);
r.onresize();
var rect; var rect;
function mousedown(e) { function mousedown(e) {
@ -5183,6 +5181,7 @@ document.onkeydown = function (e) {
} }
})(); })();
function aligngriditems() { function aligngriditems() {
if (!treectl) if (!treectl)
return; return;
@ -5205,7 +5204,8 @@ function aligngriditems() {
ebi('ggrid').style.justifyContent = treectl.hidden ? 'center' : 'space-between'; ebi('ggrid').style.justifyContent = treectl.hidden ? 'center' : 'space-between';
} }
} }
window.addEventListener('resize', aligngriditems); onresize100.add(aligngriditems);
var treectl = (function () { var treectl = (function () {
var r = { var r = {

View file

@ -2630,8 +2630,7 @@ function up2k_init(subtle) {
} }
} }
} }
window.addEventListener('resize', onresize); onresize100.add(onresize, true);
onresize();
if (MOBILE) { if (MOBILE) {
// android-chrome wobbles for a bit; firefox / iOS-safari are OK // android-chrome wobbles for a bit; firefox / iOS-safari are OK

View file

@ -1051,6 +1051,67 @@ function cliptxt(txt, ok) {
} }
function Debounce(delay) {
var r = this;
r.delay = delay;
r.timer = 0;
r.t_hit = 0;
r.t_run = 0;
r.q = [];
r.add = function (fun, run) {
r.rm(fun);
r.q.push(fun);
if (run)
fun();
};
r.rm = function (fun) {
apop(r.q, fun);
};
r.run = function () {
if (crashed)
return;
r.t_run = Date.now();
var q = r.q.slice(0);
for (var a = 0; a < q.length; a++)
q[a]();
};
r.hit = function () {
if (crashed)
return;
var now = Date.now(),
td_hit = now - r.t_hit,
td_run = now - r.t_run;
if (td_run >= r.delay * 2)
r.t_run = now;
if (td_run >= r.delay && td_run <= r.delay * 2) {
// r.delay is also deadline
clearTimeout(r.timer);
return r.run();
}
if (td_hit < r.delay / 5)
return;
clearTimeout(r.timer);
r.timer = setTimeout(r.doit, r.delay);
r.t_hit = now;
};
};
var onresize100 = new Debounce(100);
window.addEventListener('resize', onresize100.hit);
var timer = (function () { var timer = (function () {
var r = {}; var r = {};
r.q = []; r.q = [];