-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjquery.fixed.js
97 lines (75 loc) · 2.98 KB
/
jquery.fixed.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
(function($) {
$.fn.fixed = function(opt) {
this.each(function() {
init.call(this, opt);
});
return this;
};
var init = function(opt) {
var options = $.extend({}, {
referDom: $('body').children().eq(0),
triggerTop: 400,
fixedTop: 47
}, opt || {});
var $el = $(this);
var $win = $(window);
var isIE6 = $.browser.msie && $.browser.version < 7;
var hasFixed = false;
var scrollLeft = $win.scrollLeft();
var referDomOffset = options.referDom.offset();
// var isSmall = $win.width() < $('body').width();
var setPosition = function() {
$el.offset({
top: referDomOffset.top,
left: referDomOffset.left + options.referDom.width() + 20
});
};
setPosition();
var handleScroll = function(e) {
if ($win.scrollLeft() != scrollLeft) {
scrollLeft = $win.scrollLeft();
return;
}
if (isIE6) {
if ($win.scrollTop() >= options.triggerTop && !hasFixed) {
$el.css('position', 'absolute');
$el[0].style.setExpression('top', 'document.compatMode=="CSS1Compat"?' +
'documentElement.scrollTop+' + options.fixedTop + ':document.body.scrollTop+' + options.fixedTop);
var body = document.body;
if (body.currentStyle.backgroundImage == 'none') {
body.style.backgroundImage = window.location.protocol == 'https:' ? 'url(https:///)' : 'url(about:blank)';
body.style.backgroundAttachment = 'fixed';
}
hasFixed = true;
} else if ($win.scrollTop() < options.triggerTop && hasFixed) {
$el[0].style.setExpression('top', referDomOffset.top);
hasFixed = false;
}
} else {
if ($win.scrollTop() >= options.triggerTop && !hasFixed) {
$el.css({
position: 'fixed',
top: options.fixedTop + 'px'
});
hasFixed = true;
} else if ($win.scrollTop() < options.triggerTop && hasFixed) {
$el.css({
position: 'absolute',
top: referDomOffset.top + 'px'
});
hasFixed = false;
}
}
};
var handleResize = function(e) {
if ($win.width() < $('body').width()) {
// isSmall = true;
$el.hide();
} else {
$el.css('left', options.referDom.offset().left + options.referDom.width() + 20).show();
}
};
$win.bind('scroll', handleScroll);
$win.bind('resize', handleResize);
};
})(jQuery);