datatable improvements - jscancer - Javascript crap (relatively small)
(HTM) git clone git://git.codemadness.org/jscancer
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 87c20268ba0558928ae28e6a59d130f14fac7795
(DIR) parent 8803e0fdca023fa927652585137eb5607355e357
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Sun, 2 Oct 2016 13:26:29 +0200
datatable improvements
- in lazyscroll mode: reset scroll position after filtering.
- in lazyscroll mode: on window resize also call scroll(): this will force
to redraw the table (fixes a glitch).
- increase scroll update interval (~30fps to ~60fps) to be a bit smoother.
Diffstat:
M datatable/datatable.js | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
---
(DIR) diff --git a/datatable/datatable.js b/datatable/datatable.js
@@ -108,23 +108,24 @@ function datatable_init(el) {
for (var i = start, prev = startfiller, p = bodytbody; i <= end; i++)
prev = p.insertBefore(d.data[i].tr, prev.nextSibling);
};
+ d.scroll = function(y) {
+ bodyel.scrollTop = y;
+ };
- var curscrollleft, curscrolltop, verticalscrolltimer;
- bodyel.addEventListener("scroll", function() {
+ var curscrollleft, verticalscrolltimer;
+ var scroll = function() {
// handle left / right scroll.
var scrolleft = bodyel.scrollLeft;
if (curscrollleft !== scrolleft)
headersel.scrollLeft = curscrollleft = scrolleft;
// handle up/down scroll.
- var scrolltop = bodyel.scrollTop;
- if (curscrolltop !== scrolltop) {
- clearTimeout(verticalscrolltimer);
- verticalscrolltimer = setTimeout(function() {
- d.display(d.data);
- }, 32);
- curscrolltop = scrolltop;
- }
- });
+ clearTimeout(verticalscrolltimer);
+ verticalscrolltimer = setTimeout(function() {
+ d.display(d.data);
+ }, 16);
+ };
+ window.addEventListener("resize", scroll);
+ bodyel.addEventListener("scroll", scroll);
d.display(d.data);
} else {
d.display = function(data) {
@@ -264,6 +265,8 @@ function datatable_filter_text(d, s) {
}
d.search = s;
d.display(d.data);
+ if (d.scroll)
+ d.scroll(0);
}
function datatable_filter_delayed(d, fn, e) {