basic_app/app/assets/javascripts/table-fixed-header.js
Nicolas Bally fd027c16c1 initial
2020-04-21 21:53:16 +02:00

71 lines
2.0 KiB
JavaScript
Executable File

(function($) {
$.fn.fixedHeader = function (options) {
var config = {
topOffset: 38
//bgColor: 'white'
};
if (options){ $.extend(config, options); }
return this.each( function() {
var o = $(this);
var $win = $(window)
, $head = $('thead.header', o)
, isFixed = 0;
var headTop = $head.length && $head.offset().top - config.topOffset;
function processScroll() {
if (!o.is(':visible')) return;
if ($('thead.header-copy').size()) {
$('thead.header-copy').width($head.width());
var i, scrollTop = $win.scrollTop();
}
var t = $head.length && $head.offset().top - config.topOffset;
if (!isFixed && headTop != t) { headTop = t; }
if (scrollTop >= headTop && !isFixed) {
isFixed = 1;
} else if (scrollTop <= headTop && isFixed) {
isFixed = 0;
}
isFixed ? $('thead.header-copy', o).show().offset({ left: $head.offset().left })
: $('thead.header-copy', o).hide();
// NG: dislocate while iframe page resized. fixed by jeffen@pactera 2015/7/8
headerCopyRectify();
}
// set a broken bone when header copy dislocated
function headerCopyRectify() {
o.find('thead.header > tr > th').each(function (i, h) {
var w = $(h).width();
o.find('thead.header-copy> tr > th:eq('+i+')').width(w)
});
}
$win.on('scroll', processScroll);
// NG: dislocate while body resized. fixed by jeffen@pactera 2015/7/9
$win.on('resize', processScroll);
// hack sad times - holdover until rewrite for 2.1
$head.on('click', function () {
if (!isFixed) setTimeout(function () { $win.scrollTop($win.scrollTop() - 47) }, 10);
})
$(this).find(".header-copy").remove()
$head.clone(true).removeClass('header').addClass('header-copy header-fixed').css({'position': 'fixed', 'top': config['topOffset']}).appendTo(o);
o.find('thead.header-copy').width($head.width());
headerCopyRectify();
$head.css({ margin:'0 auto',
width: o.width(),
'background-color':config.bgColor });
processScroll();
});
};
})(jQuery);