Javascript scroll
イベントを使用してテーブルヘッダーを固定して、テーブルヘッダーのtop
プロパティを操作しようとしています。Javascriptのパフォーマンス:スクロール時の固定テーブルヘッダーと列
このテクニックは、ブラウザと画面の解像度によって大きく異なるようです(私の主要サイト訪問者はRetina MBPです)。現在、それはひどく骨が折れる。このフィドルでうまくいくように見えるかもしれませんが、あなたのデスクトップ上では実際にはゆっくりとジャンクになります。
https://jsfiddle.net/taylorpalmer/exp057a5/
私は、ページをスクロールして、あなたがそれを過ぎてスクロールするように、テーブルヘッダースティックを持ってできるようにする必要があります。
var allTh = document.querySelectorAll("th");
var leftCells = document.querySelectorAll(".fixed-col");
var latestKnownScrollX = 0;
var latestKnownScrollY = 0;
var ticking = false;
var onScroll = function() {
latestKnownScrollX = document.body.scrollLeft;
latestKnownScrollY = document.body.scrollTop;
requestTick();
}
function requestTick() {
if (!ticking) {
requestAnimationFrame(update);
}
ticking = true;
}
var immediate = true;
var update = function() {
console.log('scrolling');
ticking = false;
var currentScrollY = latestKnownScrollY;
var currentScrollX = latestKnownScrollX;
var translateHead = (currentScrollY) +"px";
for(var i=0; i < allTh.length; i++) {
allTh[i].style.top = translateHead;
}
var translateCell = currentScrollX + "px";
for(var i=0; i < leftCells.length; i++) {
leftCells[i].style.left = translateCell;
}
};
window.addEventListener("scroll", onScroll);
物事が私はすでに試してみました:
- が
requestAnimationFrame()
を使用して - 現在 - デバウンススクロールを実装しています - パフォーマンスを向上させなかった
- スロットルスクロール - パフォーマンスを改善しなかった
top
の代わりにtransform: translate()
を使用すると、違い
物事私がについて考えてきましたが、position: fixed
または類似を使用して
- を動作しません:ヘッダーセルが彼らのダイナミックな幅を失い、価値のないテーブルになるだろう
私は 'position:fixed'を使ってより良いスクロールパフォーマンスを作り、' scroll'イベントで反対の軸を操作しましたが、それは2倍の作業です。通常のスクロールの監視を改善するためのアイデアですか? – taylorpalmer