71 lines
2.0 KiB
JavaScript
Executable File
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);
|