tbodyプラススクロール⋯⋯ブログ園から






    Untitled

    
    
    $(function(){
        var table = $('table.scrolltable').each(function(){
            var $table = $(this).css('border-collapse','collapse');
            var $tbody = $table.find('tbody').eq(0);
            var sbPosition = {left: $tbody.position().left + $tbody.outerWidth(), top: $tbody.position().top };
            
            var $scrollbar = $('<div class="scrollbar"/>').css({'position':'absolute', 'overflow-y':'auto',left:sbPosition.left, top:sbPosition.top, height:'0px',width:'20px'})
                .append($('<div/>'))
                .appendTo($table.parent());
                
                
            $table.bind('rownum',function(event, newRowNum){
                //       
                var nFirst = parseInt($tbody.attr('itemIndex') || '0');
                $tbody.find('tr').hide();
                $tbody.find('tr').each(function(i){
                    if( i >= nFirst && i < nFirst + newRowNum)
                    {
                        $(this).show();
                    }
                    else
                    {
                        $(this).hide();
                    }
                });
                
                var scrollHeight =  $tbody.find('tr').length  * $tbody.height() / newRowNum;
                var $sb = $scrollbar;
                $sb.css('height',$tbody.height());
                $sb.find('div').eq(0).css('height',scrollHeight);
            });
            
            $scrollbar.scroll(function(){
                $sb = $(this);
                
                var nNewIndex = Math.floor($sb.scrollTop() / $sb.attr('scrollHeight') * $tbody.find('tr').length);
                var nIndex = parseInt($tbody.attr('itemIndex') || '0');
                var rownum = parseInt($table.attr('rownum') || '10');
                if(nIndex != nNewIndex)
                {
                    $tbody.find('tr').each(function(i){
                        if(i >= nNewIndex && i < nNewIndex + rownum)
                        {
                            $(this).show();
                        }
                        else
                        {
                            $(this).hide();
                        }
                    });
                    $tbody.attr('itemIndex', nNewIndex); 
                }
                
                
            });
            
            $table.trigger('rownum',parseInt($table.attr('rownum')));
        });
    });
        
        
    
    



    
aaa bbb ccc ddd eee fff
111 111 111 111 111 111
222 222 222 222 222 222
333 333 333 333 333 333
444 444 444 444 444 444
555 555 555 555 555 555
444 444 444 444 444 444
111 111 111 111 111 111
222 222 222 222 222 222
333 333 333 333 333 333
444 444 444 444 444 444
555 555 555 555 555 555
444 444 444 444 444 444
111 111 111 111 111 111
222 222 222 222 222 222
333 333 333 333 333 333
444 444 444 444 444 444
555 555 555 555 555 555
444 444 444 444 444 444
111 111 111 111 111 111
222 222 222 222 222 222
333 333 333 333 333 333
444 444 444 444 444 444
555 555 555 555 555 555
444 444 444 444 444 END
444 444 444 444 444 444
111 111 111 111 111 111
222 222 222 222 222 222
333 333 333 333 333 333
444 444 444 444 444 444
555 555 555 555 555 555
444 444 444 444 444 END
444 444 444 444 444 444
111 111 111 111 111 111
222 222 222 222 222 222
333 333 333 333 333 333
444 444 444 444 444 444
555 555 555 555 555 555
444 444 444 444 444 END
444 444 444 444 444 444
111 111 111 111 111 111
222 222 222 222 222 222
333 333 333 333 333 333
444 444 444 444 444 444
555 555 555 555 555 555
444 444 444 444 444 END
444 444 444 444 444 444
111 111 111 111 111 111
222 222 222 222 222 222
333 333 333 333 333 333
444 444 444 444 444 444
555 555 555 555 555 555
444 444 444 444 444 END
444 444 444 444 444 END