fd-gulp-convert-encoding
Version:
convert file to assigned charset
142 lines (118 loc) • 3.75 kB
JavaScript
/**
* @author: mg12 [http://www.neoease.com/]
* @update: 2012/12/05
*/
SidebarFollow = function() {
this.config = {
element: null, // �����Ľڵ�
distanceToTop: 0 // �ڵ��ϱߵ�ҳ�涥���ľ���
};
this.cache = {
originalToTop: 0, // ԭ����ҳ�涥���ľ���
prevElement: null, // ��һ���ڵ�
parentToTop: 0, // ���ڵ���ϱߵ���������
placeholder: jQuery('<div>') // ռλ�ڵ�
}
};
SidebarFollow.prototype = {
init: function(config) {
this.config = config || this.config;
var _self = this;
var element = jQuery(_self.config.element);
_self.isIE6 = false;
_self.originalOffeset = element.offset().top;
jQuery.browser.version === "6.0" ? _self.isIE6 = true : _self.isIE6 = false;
// ���û���ҵ��ڵ�, �����д���
if(element.length <= 0) {
return;
}
// ��ȡ��һ���ڵ�
var prevElement = element.prev();
while(prevElement.is(':hidden')) {
prevElement = prevElement.prev();
if(prevElement.length <= 0) {
break;
}
}
_self.cache.prevElement = prevElement;
// ���㸸�ڵ���ϱߵ���������
var parent = element.parent();
var parentToTop = parent.offset().top;
var parentBorderTop = parent.css('border-top');
var parentPaddingTop = parent.css('padding-top');
_self.cache.parentToTop = parentToTop + parentBorderTop + parentPaddingTop;
// ������Ļ
jQuery(window).scroll(function() {
_self._scrollScreen({element:element, _self:_self});
if( _self.isIE6 ){
_self._fixIE6({element:element, _self:_self});
}
});
// �ı���Ļ�ߴ�
jQuery(window).resize(function() {
_self._scrollScreen({element:element, _self:_self});
if( _self.isIE6 ){
_self._fixIE6({element:element, _self:_self});
}
});
},
/**
* �Ľڵ�λ��
*/
_scrollScreen: function(args) {
var _self = args._self;
var element = args.element;
var prevElement = _self.cache.prevElement;
// ��õ������ľ���
var toTop = _self.config.distanceToTop;
// ��� body �� top ����, ������Щλ��
var bodyToTop = parseInt(jQuery('body').css('top'), 10);
if(!isNaN(bodyToTop)) {
toTop += bodyToTop;
}
// ��õ������ľ��Ծ���
var elementToTop = element.offset().top - toTop;
// ���������һ���ڵ�, ��õ���һ���ڵ�ľ���; ������㵽���ڵ㶥���ľ���
var referenceToTop = 0;
if(prevElement && prevElement.length === 1) {
referenceToTop = prevElement.offset().top + prevElement.outerHeight();
} else {
referenceToTop = _self.cache.parentToTop - toTop;
}
// ���ڵ�����������, �������
if(jQuery(document).scrollTop() > elementToTop) {
// ����ռλ�ڵ�
var elementHeight = element.outerHeight();
_self.cache.placeholder.css('height', elementHeight).insertBefore(element);
// ��¼ԭλ��
_self.cache.originalToTop = elementToTop;
// ����ʽ
element.css({
top: toTop + 'px',
position: 'fixed'
});
// ����ص�ԭλ
} else if(_self.cache.originalToTop > elementToTop || referenceToTop > elementToTop) {
// ɾ��ռλ�ڵ�
_self.cache.placeholder.remove();
// ����ʽ
element.css({
position: 'static'
});
}
},
_fixIE6: function(args) {
var _self = args._self;
var element = args.element;
if (_self.originalOffeset + 450 < jQuery(document).scrollTop() ) {
element.css({
top: jQuery(document).scrollTop() - 190 + 'px',
position: 'absolute'
});
} else {
element.css({
position: 'static'
});
}
}
};