PageSourceSearch

https://sankei-shougakukai.jp/js/scrollfollow.js

js sankei-shougakukai.jp collected 2026-10-05 11:02:32 UTC 7,664 bytes, 251 lines download raw bytes

1/**
2 * jquery.scrollFollow.js
3 * Copyright (c) 2008 Net Perspective (http://kitchen.net-perspective.com/)
4 * Licensed under the MIT License (http://www.opensource.org/licenses/mit-license.php)
5 * 
6 * @author R.A. Ray
7 *
8 * @projectDescription	jQuery plugin for allowing an element to animate down as the user scrolls the page.
9 * 
10 * @version 0.4.0
11 * 
12 * @requires jquery.js (tested with 1.2.6)
13 * @requires ui.core.js (tested with 1.5.2)
14 * 
15 * @optional jquery.cookie.js (http://www.stilbuero.de/2006/09/17/cookie-plugin-for-jquery/)
16 * @optional jquery.easing.js (http://gsgd.co.uk/sandbox/jquery/easing/ - tested with 1.3)
17 * 
18 * @param speed		int - Duration of animation (in milliseconds)
19 * 								default: 500
20 * @param offset			int - Number of pixels box should remain from top of viewport
21 * 								default: 0
22 * @param easing		string - Any one of the easing options from the easing plugin - Requires jQuery Easing Plugin < http://gsgd.co.uk/sandbox/jquery/easing/ >
23 * 								default: 'linear'
24 * @param container	string - ID of the containing div
25 * 								default: box's immediate parent
26 * @param killSwitch	string - ID of the On/Off toggle element
27 * 								default: 'killSwitch'
28 * @param onText		string - killSwitch text to be displayed if sliding is enabled
29 * 								default: 'Turn Slide Off'
30 * @param offText		string - killSwitch text to be displayed if sliding is disabled
31 * 								default: 'Turn Slide On'
32 * @param relativeTo	string - Scroll animation can be relative to either the 'top' or 'bottom' of the viewport
33 * 								default: 'top'
34 * @param delay			int - Time between the end of the scroll and the beginning of the animation in milliseconds
35 * 								default: 0
36 */
37
38( function( $ ) {
39	
40	$.scrollFollow = function ( box, options )
41	{ 
42		// Convert box into a jQuery object
43		box = $( box );
44		
45		// 'box' is the object to be animated
46		var position = box.css( 'position' );
47		
48		function ani()
49		{		
50			// The script runs on every scroll which really means many times during a scroll.
51			// We don't want multiple slides to queue up.
52			box.queue( [ ] );
53		
54			// A bunch of values we need to determine where to animate to
55			var viewportHeight = parseInt( $( window ).height() );	
56			var pageScroll =  parseInt( $( document ).scrollTop() );
57			var parentTop =  parseInt( box.cont.offset().top );
58			var parentHeight = parseInt( box.cont.outerHeight() );
59			var boxHeight = parseInt( box.outerHeight() + ( parseInt( box.css( 'marginTop' ) ) || 0 ) + ( parseInt( box.css( 'marginBottom' ) ) || 0 ) );
60			var aniTop;
61			
62			// Make sure the user wants the animation to happen
63			if ( isActive )
64			{
65				// If the box should animate relative to the top of the window
66				if ( options.relativeTo == 'top' )
67				{
68					// Don't animate until the top of the window is close enough to the top of the box
69					if ( box.initialOffsetTop >= ( pageScroll + options.offset ) )
70					{
71						aniTop = box.initialTop;
72					}
73					else
74					{
75						aniTop = Math.min( ( Math.max( ( -parentTop ), ( pageScroll - box.initialOffsetTop + box.initialTop ) ) + options.offset ), ( parentHeight - boxHeight - box.paddingAdjustment ) );
76					}
77				}
78				// If the box should animate relative to the bottom of the window
79				else if ( options.relativeTo == 'bottom' )
80				{
81					// Don't animate until the bottom of the window is close enough to the bottom of the box
82					if ( ( box.initialOffsetTop + boxHeight ) >= ( pageScroll + options.offset + viewportHeight ) )
83					{
84						aniTop = box.initialTop;
85					}
86					else
87					{
88						aniTop = Math.min( ( pageScroll + viewportHeight - boxHeight - options.offset ), ( parentHeight - boxHeight ) );
89					}
90				}
91				
92				// Checks to see if the relevant scroll was the last one
93				// "-20" is to account for inaccuracy in the timeout
94				if ( ( new Date().getTime() - box.lastScroll ) >= ( options.delay - 20 ) )
95				{
96					box.animate(
97						{
98							top: aniTop
99						}, options.speed, options.easing
100					);
101				}
102			}
103		};
104		
105		// For user-initiated stopping of the slide
106		var isActive = true;
107		
108		if ( $.cookie != undefined )
109		{
110			if( $.cookie( 'scrollFollowSetting' + box.attr( 'id' ) ) == 'false' )
111			{
112				var isActive = false;
113				
114				$( '#' + options.killSwitch ).text( options.offText )
115					.toggle( 
116						function ()
117						{
118							isActive = true;
119							
120							$( this ).text( options.onText );
121							
122							$.cookie( 'scrollFollowSetting' + box.attr( 'id' ), true, { expires: 365, path: '/'} );
123							
124							ani();
125						},
126						function ()
127						{
128							isActive = false;
129							
130							$( this ).text( options.offText );
131							
132							box.animate(
133								{
134									top: box.initialTop
135								}, options.speed, options.easing
136							);	
137							
138							$.cookie( 'scrollFollowSetting' + box.attr( 'id' ), false, { expires: 365, path: '/'} );
139						}
140					);
141			}
142			else
143			{
144				$( '#' + options.killSwitch ).text( options.onText )
145					.toggle( 
146						function ()
147						{
148							isActive = false;
149							
150							$( this ).text( options.offText );
151							
152							box.animate(
153								{
154									top: box.initialTop
155								}, 0
156							);	
157							
158							$.cookie( 'scrollFollowSetting' + box.attr( 'id' ), false, { expires: 365, path: '/'} );
159						},
160						function ()
161						{
162							isActive = true;
163							
164							$( this ).text( options.onText );
165							
166							$.cookie( 'scrollFollowSetting' + box.attr( 'id' ), true, { expires: 365, path: '/'} );
167							
168							ani();
169						}
170					);
171			}
172		}
173		
174		// If no parent ID was specified, and the immediate parent does not have an ID
175		// options.container will be undefined. So we need to figure out the parent element.
176		if ( options.container == '')
177		{
178			box.cont = box.parent();
179		}
180		else
181		{
182			box.cont = $( '#' + options.container );
183		}
184		
185		// Finds the default positioning of the box.
186		box.initialOffsetTop =  parseInt( box.offset().top );
187		box.initialTop = parseInt( box.css( 'top' ) ) || 0;
188		
189		// Hack to fix different treatment of boxes positioned 'absolute' and 'relative'
190		if ( box.css( 'position' ) == 'relative' )
191		{
192			box.paddingAdjustment = parseInt( box.cont.css( 'paddingTop' ) ) + parseInt( box.cont.css( 'paddingBottom' ) );
193		}
194		else
195		{
196			box.paddingAdjustment = 0;
197		}
198		
199		// Animate the box when the page is scrolled
200		$( window ).scroll( function ()
201			{
202				// Sets up the delay of the animation
203				$.fn.scrollFollow.interval = setTimeout( function(){ ani();} , options.delay );
204				
205				// To check against right before setting the animation
206				box.lastScroll = new Date().getTime();
207			}
208		);
209		
210		// Animate the box when the page is resized
211		$( window ).resize( function ()
212			{
213				// Sets up the delay of the animation
214				$.fn.scrollFollow.interval = setTimeout( function(){ ani();} , options.delay );
215				
216				// To check against right before setting the animation
217				box.lastScroll = new Date().getTime();
218			}
219		);
220
221		// Run an initial animation on page load
222		box.lastScroll = 0;
223		
224		ani();
225	};
226	
227	$.fn.scrollFollow = function ( options )
228	{
229		options = options || {};
230		options.relativeTo = options.relativeTo || 'top';
231		options.speed = options.speed || 500;
232		options.offset = options.offset || 0;
233		options.easing = options.easing || 'swing';
234		options.container = options.container || this.parent().attr( 'id' );
235		options.killSwitch = options.killSwitch || 'killSwitch';
236		options.onText = options.onText || 'Turn Slide Off';
237		options.offText = options.offText || 'Turn Slide On';
238		options.delay = options.delay || 0;
239		
240		this.each( function() 
241			{
242				new $.scrollFollow( this, options );
243			}
244		);
245		
246		return this;
247	};
248})( jQuery );
249
250
251

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.