본문 바로가기
프로그래밍/html & jsp

테이블의 타이틀은 고정시키고 상하좌우 스크롤하기

by Super User 2009. 6. 10.

테이블의 타이틀을 고정시키고 상하만 스크롤하는 방법은 div 태그에 scroll태그만 주면되지만 테이블이 화면 사이즈를 벗어나서 상하좌우 스크롤이 필요할 경우는 스크립트까지 사용해야만 가능하다.
다음과 같은 화면이다.
1. 화면이 벗어나서 오른쪽 옆에는 보여지지 않고 있다.

그림 1

2.스크롤을 우측으로 가져간 화면이다.


그림 2

 

그림 1과 그림 2를 보면 좌우 스크롤을 움직였을때 우측의 스크롤바 위치는 계속 고정이 되있고,

상하 스크롤을 움직였을경우 테이블의 타이틀은 고정이 되고 리스트쪽만 스크롤 된다.

 

이 소스는 담과 같다.

<script language=javascript>
/*---------------------------------------------------------------
/* 좌우 스크롤시 header와 data부 함께 이동
/*---------------------------------------------------------------*/
function f_scroll() {
 var x = document.all["list"].scrollLeft;

 document.all["intitle"].style.left = 0 - x;
}
</script>

<body>
<table width="100%" border="0" cellpadding="0" cellspacing="1" class="listbd" style=table-layout:fixed>
 <tr>
   <td>
   <div id=head style=width:100%;height:22;overflow-y:hidden>
   <div id="intitle" style=position:absolute;>
     <table width="1200" border="1" cellpadding="0" cellspacing="1" style=table-layout:fixed bgcolor="#00cc6">
       <tr align=center>
         <td width="100" height="20" >이름</td>
         <td width="100" >나이</td>
         <td width="100" >타율</td>
         <td width="100" >출루율</td>
         <td width="100" >장타율</td>
         <td width="100" >1루타</td>
         <td width="100" >2루타</td>
         <td width="100" >3루타</td>
         <td width="100" >홈런</td>
         <td width="100" >도루</td>
         <td width="100" >삼진</td>
         <td width="100" >볼넷</td>
       </tr>    
     </table>
   </div>
   </div>
   </td>
 </tr>
 <tr>
   <td>
     <div id="list" onScroll=f_scroll()  style=width:100%;height:74;overflow-x:scroll;overflow-y:scroll>
     <table width="1200" border="1" cellpadding="0" cellspacing="1" style=table-layout:fixed >
       <tr align=center>
         <td width="100" height="20" >홍길동</td>
         <td width="100" >22</td>
         <td width="100" >313</td>
         <td width="100" >300</td>
         <td width="100" >600</td>
         <td width="100" >50</td>
         <td width="100" >22</td>
         <td width="100" >10</td>
         <td width="100" >15</td>
         <td width="100" >10</td>
         <td width="100" >30</td>
         <td width="100" >20</td>
       </tr>    
       <tr align=center>
         <td width="100" height="20" >강감찬</td>
         <td width="100" >22</td>
         <td width="100" >313</td>
         <td width="100" >300</td>
         <td width="100" >600</td>
         <td width="100" >50</td>
         <td width="100" >22</td>
         <td width="100" >10</td>
         <td width="100" >15</td>
         <td width="100" >10</td>
         <td width="100" >30</td>
         <td width="100" >20</td>
       </tr>
       <tr align=center>
         <td width="100" height="20" >장보구</td>
         <td width="100" >22</td>
         <td width="100" >313</td>
         <td width="100" >300</td>
         <td width="100" >600</td>
         <td width="100" >50</td>
         <td width="100" >22</td>
         <td width="100" >10</td>
         <td width="100" >15</td>
         <td width="100" >10</td>
         <td width="100" >30</td>
         <td width="100" >20</td>
       </tr>
       <tr align=center>
         <td width="100" height="20" >술먹구</td>
         <td width="100" >22</td>
         <td width="100" >313</td>
         <td width="100" >300</td>
         <td width="100" >600</td>
         <td width="100" >50</td>
         <td width="100" >22</td>
         <td width="100" >10</td>
         <td width="100" >15</td>
         <td width="100" >10</td>
         <td width="100" >30</td>
         <td width="100" >20</td>
       </tr>                  
     </table>    
     </div>
   </td>
  </tr>
</table>
</body>

중점적으로 볼 부분은 테이블을 타이틀을 보여주는 테이블 리스트를 보여주는 테이블 두개로 나누어서 만들었고. 테이블의 타이틀을 보여주는 테이블을 div 태그로 두번 감싸고 overflow 를 hidden값을 주었다.

테이블의 리스트를 보여주는 div 태그에 onScroll 이벤트에서 사용자정의 함수를 호출하도록 해서 리스트쪽 스크롤을 움직였을때 테이블의 타이틀쪽 스크롤도 움직이도록 했다.

붉은색 코드가 핵심