どうも、もりもりです。
今回はjQueryで複数のコンテナにセットしたスクロールバーの動きを連動させる方法を紹介したいと思います。
ASP.NETでデータを一覧表示するにあたって、ヘッダはもちろん固定ですが列も一部を固定にしたいという要望が合ったので
まずはHTMLでどうすれば良いかを検証します。
まずはコンテナを4つに区切る
一覧を下記の4つに区切ります。
- ヘッダ固定
- ヘッダスクロール
- データ部固定
- データ部スクロール
index.html
スクロールをコンテナにセット
ヘッダスクロール部には横スクロール、データ固定部には縦スクロール、データスクロール部には縦横両方スクロールをセットします。
index.css
スクロールバーを連動
ヘッダのスクロールイベントで、横の位置をデータスクロール部の横の位置にセットします。
同様にデータ固定部とデータスクロール部のスクロールイベントにも連動させたいスクロール位置を合わせます。
これだけです。
index.js
スクロールバーを非表示
スクロールバーを非表示にするには下記のスタイルを追加。(Chrome、Edge、Safariで有効)
index.css
スクロールを高速化
PCによってはスクロールがもっさりと動くことも。そんな時は1行 will-change: transform;
を追加するだけ。
index.css
OSによってはサイズ調整が必要
Macではスクロールバーはコンテナ内に表示されますが、Windowsでは常に表示されます。
スタイルのscrollDataList
のmax-width
とmax-height
を微調整してください。
だいたい17pxぐらいかな?
OSでそれぞれ対応するのが面倒ということでればいっそのことスクロールバーのスタイルを追加して常時表示するという手もありかと。
下記の全体ソースではスクロールバーのスタイルあり版にしてます。
全体ソース
全体はこんな感じです。
※表示幅の関係でスクロールバー分レイアウトが崩れてしまってます。
「0.5x」でご確認いただければと。
さいごに
ここまでできたのでASP.NETのListViewで使いたい場合はLayoutTemplateやItemTemplateに落とし込むだけです。
ASP.NET開発においても最終的にできるHTMLを意識しておけば苦労することはないでしょう。
以上、もりもりでした。