UNPKG

fd-gulp-convert-encoding

Version:

convert file to assigned charset

142 lines (118 loc) 3.75 kB
/** * @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' }); } } };