HTMLのtableでexcelのウィンドウ枠固定のようにスクロールさせたくなったら
HTMLのtableでexcelのウィンドウ枠固定のようにスクロールさせたくなったら
実装
<!DOCTYPE html> <html lang="jp"> <head> <meta charset="UTF-8"> <script src="js/vendor/jquery-1.12.0.min.js"></script> <title>Title</title> <script> function initializeTable () { $("table th").css("background-color", "aqua"); $("table td").css("background-color", "aquamarine"); var thl = $(".table_head_left"); var thr = $(".table_head_right"); var tbl = $(".table_body_left"); var tbr = $(".table_body_right"); var dhr = $(".div_head_right"); var dbl = $(".div_body_left"); var dbr = $(".div_body_right"); //左上 thl.css("height", thr.outerHeight()); thl.css("width", tbl.outerWidth()); //右上 dhr.css("position", "absolute"); dhr.css("top", thl.offset().top); dhr.css("left", thl.offset().left + thl.outerWidth()); dhr.css("overflow-x", "hidden"); //左下 dbl.css("position", "absolute"); dbl.css("top", thl.offset().top + thl.outerHeight()); dbl.css("overflow-y", "hidden"); //右下 dbr.css("position", "absolute"); dbr.css("top", thl.offset().top + thr.outerHeight()); dbr.css("left", thl.offset().left + tbl.outerWidth()); dbr.css("overflow-x", "scroll"); dbr.css("overflow-y", "scroll"); if (thr.width() > tbr.width()) { //ボディ幅をヘッダ幅に合わせる tbr.width(thr.width()); } else { thr.width(tbr.width()); } //scroll連動 dbr.scroll(function(){ dhr.scrollLeft($(this).scrollLeft()); dbl.scrollTop($(this).scrollTop()); }); //画面広さ制限模 var scrollbarwidth = window.innerWidth - document.body.clientWidth; dhr.width(tbr.width()/2); dbr.width(tbr.width()/2+scrollbarwidth); dbl.height(tbr.height()/2); dbr.height(tbr.height()/2+scrollbarwidth); } $(initializeTable); </script> </head> <body> <div class="div_head_left"> <table class="table_head_left"> <tr> <th></th> </tr> </table> </div> <div class="div_head_right"> <table class="table_head_right"> <tr> <th>hogehoge</th> </tr> </table> </div> <div class="div_body_left"> <table class="table_body_left"> <tr> <th>1</td> </tr> <tr> <th>2</th> </tr> <tr> <th>3</td> </tr> <tr> <th>4</th> </tr> </table> </div> <div class="div_body_right"> <table class="table_body_right"> <tr> <td>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</td> </tr> <tr> <td>b</td> </tr> <tr> <td>c</td> </tr> <tr> <td>d</td> </tr> </table> </div> </body> </html>
POINT
- scroll
- overflowはdivタグで使う、tableタグでは動作しない
- overflowは、
width, heightプロパティでサイズ指定した要素で、 そのサイズよりも内容が大きい場合などが対象になります
- table
- 横に並べるにはpositionで明示的に位置決めをする