PageSourceSearch

https://actp.co.jp/common/js/vendor/jquery.sticky.js?20190125

js actp.co.jp collected 2026-10-04 14:11:29 UTC 3,333 bytes, 107 lines download raw bytes

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.