You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.6 KiB
68 lines
2.6 KiB
(function($){
|
|
|
|
/**
|
|
* Copyright 2012, Digital Fusion
|
|
* Licensed under the MIT license.
|
|
* http://teamdf.com/jquery-plugins/license/
|
|
*
|
|
* @author Sam Sehnert
|
|
* @desc A small plugin that checks whether elements are within
|
|
* the user visible viewport of a web browser.
|
|
* only accounts for vertical position, not horizontal.
|
|
*/
|
|
var $w = $(window);
|
|
$.fn.visible = function(partial,hidden,direction){
|
|
|
|
if (this.length < 1)
|
|
return;
|
|
|
|
var $t = this.length > 1 ? this.eq(0) : this,
|
|
t = $t.get(0),
|
|
vpWidth = $w.width(),
|
|
vpHeight = $w.height(),
|
|
direction = (direction) ? direction : 'both',
|
|
clientSize = hidden === true ? t.offsetWidth * t.offsetHeight : true;
|
|
|
|
if (typeof t.getBoundingClientRect === 'function'){
|
|
|
|
// Use this native browser method, if available.
|
|
var rec = t.getBoundingClientRect(),
|
|
tViz = rec.top >= 0 && rec.top < vpHeight,
|
|
bViz = rec.bottom > 0 && rec.bottom <= vpHeight,
|
|
lViz = rec.left >= 0 && rec.left < vpWidth,
|
|
rViz = rec.right > 0 && rec.right <= vpWidth,
|
|
vVisible = partial ? tViz || bViz : tViz && bViz,
|
|
hVisible = partial ? lViz || lViz : lViz && rViz;
|
|
|
|
if(direction === 'both')
|
|
return clientSize && vVisible && hVisible;
|
|
else if(direction === 'vertical')
|
|
return clientSize && vVisible;
|
|
else if(direction === 'horizontal')
|
|
return clientSize && hVisible;
|
|
} else {
|
|
|
|
var viewTop = $w.scrollTop(),
|
|
viewBottom = viewTop + vpHeight,
|
|
viewLeft = $w.scrollLeft(),
|
|
viewRight = viewLeft + vpWidth,
|
|
offset = $t.offset(),
|
|
_top = offset.top,
|
|
_bottom = _top + $t.height(),
|
|
_left = offset.left,
|
|
_right = _left + $t.width(),
|
|
compareTop = partial === true ? _bottom : _top,
|
|
compareBottom = partial === true ? _top : _bottom,
|
|
compareLeft = partial === true ? _right : _left,
|
|
compareRight = partial === true ? _left : _right;
|
|
|
|
if(direction === 'both')
|
|
return !!clientSize && ((compareBottom <= viewBottom) && (compareTop >= viewTop)) && ((compareRight <= viewRight) && (compareLeft >= viewLeft));
|
|
else if(direction === 'vertical')
|
|
return !!clientSize && ((compareBottom <= viewBottom) && (compareTop >= viewTop));
|
|
else if(direction === 'horizontal')
|
|
return !!clientSize && ((compareRight <= viewRight) && (compareLeft >= viewLeft));
|
|
}
|
|
};
|
|
|
|
})(jQuery);
|