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

View file

@ -2630,8 +2630,7 @@ function up2k_init(subtle) {
}
}
}
window.addEventListener('resize', onresize);
onresize();
onresize100.add(onresize, true);
if (MOBILE) {
// 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 r = {};
r.q = [];