Archive: Namaste PHP AMQP framework v1.0 (2017-2020)
952 days continuous production uptime, 40k+ tp/s single node. Original corpo Bitbucket history not included — clean archive commit.
This commit is contained in:
117
html/js/modules (optional)/jquery.sticky.js
Executable file
117
html/js/modules (optional)/jquery.sticky.js
Executable file
@@ -0,0 +1,117 @@
|
||||
/* jSticky Plugin
|
||||
* =============
|
||||
* Author: Andrew Henderson (@AndrewHenderson)
|
||||
* Contributor: Mike Street (@mikestreety)
|
||||
* Date: 9/7/2012
|
||||
* Update: 09/20/2016
|
||||
* Website: http://github.com/andrewhenderson/jsticky/
|
||||
* Description: A jQuery plugin that keeps select DOM
|
||||
* element(s) in view while scrolling the page.
|
||||
*/
|
||||
|
||||
;(function($) {
|
||||
|
||||
$.fn.sticky = function(options) {
|
||||
var defaults = {
|
||||
topSpacing: 0, // No spacing by default
|
||||
zIndex: '', // No default z-index
|
||||
stopper: '.sticky-stopper', // Default stopper class, also accepts number value
|
||||
stickyClass: false // Class applied to element when it's stuck
|
||||
};
|
||||
var settings = $.extend({}, defaults, options); // Accepts custom stopper id or class
|
||||
|
||||
// Checks if custom z-index was defined
|
||||
function checkIndex() {
|
||||
if (typeof settings.zIndex == 'number') {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
var hasIndex = checkIndex(); // True or false
|
||||
|
||||
// Checks if a stopper exists in the DOM or number defined
|
||||
function checkStopper() {
|
||||
if (0 < $(settings.stopper).length || typeof settings.stopper === 'number') {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
var hasStopper = checkStopper(); // True or false
|
||||
|
||||
return this.each(function() {
|
||||
|
||||
var $this = $(this);
|
||||
var thisHeight = $this.outerHeight();
|
||||
var thisWidth = $this.outerWidth();
|
||||
var topSpacing = settings.topSpacing;
|
||||
var zIndex = settings.zIndex;
|
||||
var pushPoint = $this.offset().top - topSpacing; // Point at which the sticky element starts pushing
|
||||
var placeholder = $('<div></div>').width(thisWidth).height(thisHeight).addClass('sticky-placeholder'); // Cache a clone sticky element
|
||||
var stopper = settings.stopper;
|
||||
var $window = $(window);
|
||||
|
||||
function stickyScroll() {
|
||||
|
||||
var windowTop = $window.scrollTop(); // Check window's scroll position
|
||||
var stopPoint = stopper;
|
||||
var parentWidth = $this.parent().width();
|
||||
|
||||
placeholder.width(parentWidth)
|
||||
|
||||
if ( hasStopper && typeof stopper === 'string' ) {
|
||||
var stopperTop = $(stopper).offset().top;
|
||||
stopPoint = (stopperTop - thisHeight) - topSpacing;
|
||||
}
|
||||
|
||||
if (pushPoint < windowTop) {
|
||||
// Create a placeholder for sticky element to occupy vertical real estate
|
||||
if(settings.stickyClass)
|
||||
$this.addClass(settings.stickyClass);
|
||||
|
||||
$this.after(placeholder).css({
|
||||
position: 'fixed',
|
||||
top: topSpacing,
|
||||
width: parentWidth
|
||||
});
|
||||
|
||||
if (hasIndex) {
|
||||
$this.css({
|
||||
zIndex: zIndex
|
||||
});
|
||||
}
|
||||
|
||||
if (hasStopper) {
|
||||
if (stopPoint < windowTop) {
|
||||
var diff = (stopPoint - windowTop) + topSpacing;
|
||||
$this.css({
|
||||
top: diff
|
||||
});
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if(settings.stickyClass)
|
||||
$this.removeClass(settings.stickyClass);
|
||||
|
||||
$this.css({
|
||||
position: 'static',
|
||||
top: null,
|
||||
left: null,
|
||||
width: 'auto'
|
||||
});
|
||||
|
||||
placeholder.remove();
|
||||
}
|
||||
}
|
||||
|
||||
if($window.innerHeight() > thisHeight) {
|
||||
|
||||
$window.bind('scroll', stickyScroll);
|
||||
$window.bind('load', stickyScroll);
|
||||
$window.bind('resize', stickyScroll);
|
||||
}
|
||||
});
|
||||
};
|
||||
})(jQuery);
|
||||
Reference in New Issue
Block a user