1(function($) { 2 3 //var originalOffset; 4 //var style; 5 6 var methods = { 7 init: function(args) { 8 var self = this; 9 10 var activeClassName = (args && args['className']) ? args['className'] : 'sticky'; 11 self.attr('activeClassName', activeClassName); 12 var delay = (args && args['delay']) ? args['delay'] : 0; 13 var defaultOffset = (args && args['defaultOffset']) ? args['defaultOffset'] : 0; 14 var offset = (args && args['offset']) ? args['offset'] : -1; 15 var activeHeight = (args && args['activeHeight']) ? args['activeHeight'] : -1; 16 var activeArea = (args && args['activeArea']) ? args['activeArea'] : null; 17 18 setTimeout(function() { 19 20 // XXX 21 $(self).addClass('activeSticky'); 22 23 var originalOffset = (offset == -1) ? $(self).offset().top : offset; 24 25 var args = { 26 target: self, 27 activeClassName: activeClassName, 28 delay: delay, 29 defaultOffset: defaultOffset, 30 offset: offset, 31 activeHeight: activeHeight, 32 activeArea: activeArea, 33 originalOffset: originalOffset 34 } 35 36 $(window).bind('scroll.' + activeClassName, args, methods['scrollEventHandler']); 37 $(window).bind('touchmove.' + activeClassName, args, methods['scrollEventHandler']); 38 39 }, delay); 40 }, 41 42 scrollEventHandler: function(event) { 43 var target = event.data.target; 44 var activeHeight = event.data.activeHeight; 45 var activeArea = event.data.activeArea; 46 var activeClassName = event.data.activeClassName; 47 var originalOffset = event.data.originalOffset; 48 var defaultOffset = event.data.defaultOffset; 49 var offset = event.data.offset; 50 var scrollTop = $(window).scrollTop(); 51 if (activeHeight != -1) { 52 // æå¹ç¯å²ãè¨å®ããã¦ããå ´å 53 if (originalOffset - defaultOffset <= scrollTop && scrollTop < originalOffset + activeHeight - defaultOffset) { 54 $(target).addClass(activeClassName); 55 } else { 56 $(target).removeClass(activeClassName); 57 } 58 } else if (activeArea != null) { 59 // è¦ç´ ãæå¹ç¯å²ã¨ãã¦è¨å®ããã¦ããå ´å 60 var activeAreaHeight = activeArea.height(); 61 if (originalOffset - defaultOffset <= scrollTop && scrollTop < originalOffset + activeAreaHeight - defaultOffset) { 62 $(target).addClass(activeClassName); 63 } else { 64 $(target).removeClass(activeClassName); 65 } 66 } else { 67 // æå¹ç¯å²ãè¨å®ããã¦ããªãå ´å 68 if (scrollTop >= originalOffset - defaultOffset) { 69 if (!$(target).hasClass(activeClassName)) { 70 $(target).addClass(activeClassName); 71 } 72 } else { 73 if ($(target).hasClass(activeClassName)) { 74 $(target).removeClass(activeClassName); 75 } 76 } 77 } 78 }, 79 80 destroy: function() { 81 var activeClassName = $(this).attr('activeClassName'); 82 return this.each(function() { 83 84 // XXX 85 $(this).removeClass('activeSticky'); 86 87 if (activeClassName) { 88 //console.log('removeClass: ' + activeClassName); 89 $(this).removeClass(activeClassName); 90 } 91 $(window).unbind('scroll.' + activeClassName); 92 $(window).unbind('touchmove.' + activeClassName); 93 }); 94 } 95 }; 96 97 $.fn.sticky = function(method) { 98 if (methods[method]) { 99 return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 100 } else if (typeof method === 'object' || !method) { 101 return methods.init.apply(this, arguments); 102 } else { 103 $.error("Method " + method + " does not supported on 'sticky' plugin"); 104 } 105 } 106 107})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.