You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
2.0 KiB
JavaScript

/*! Fixedfixed: a CSS position:fixed qualifier. (c)2012 @scottjehl, Filament Group, Inc. Dual license: MIT and/or GPLv2 */
(function( w, undefined ){
var htmlclass = "fixed-supported",
el = w.document.createElement( "div" ),
ua = w.navigator.userAgent,
docEl = w.document.documentElement;
// fix the test element
el.style.position = "fixed";
el.style.top = 0;
// support test
function checkFixed(){
var scroll = "scrollTop" in w.document.body ? w.document.body.scrollTop : docEl.scrollTop;
// only run test if there's a scroll we can compare
if( scroll !== undefined && scroll > 0 && w.document.body ){
w.document.body.insertBefore( el, w.document.body.firstChild );
if( !el.getBoundingClientRect || el.getBoundingClientRect().top !== 0 ){
// Fixed is not working or can't be tested
docEl.className = docEl.className.replace( htmlclass, "" );
}
// remove the test element
w.document.body.removeChild( el );
// unbind the handlers
if( w.removeEventListener ){
w.removeEventListener( "scroll", checkFixed, false );
}
else{
w.detachEvent( "onscroll", checkFixed );
}
}
}
// if a particular UA is known to return false results with this feature test, try and avoid that UA here.
if(
// Android 2.1, 2.2, 2.5, and 2.6 Webkit
!( ua.match( /Android 2\.[1256]/ ) && ua.indexOf( "AppleWebKit") > -1 ) ||
// Opera Mobile less than version 11.0 (7458)
!( ua.match( /Opera Mobi\/([0-9]+)/ ) && RegExp.$1 < 7458 ) ||
// Opera Mini
!( w.operamini && ({}).toString.call( w.operamini ) === "[object OperaMini]" ) ||
// Firefox Mobile less than version 6
!( ua.match( /Fennec\/([0-9]+)/ ) && RegExp.$1 < 6 )
// If necessary, add the other untestable browsers here...
){
//add the HTML class for now.
docEl.className += " " + htmlclass;
// bind to scroll event so we can test and potentially degrade
if( w.addEventListener ){
w.addEventListener( "scroll", checkFixed, false );
}
else{
w.attachEvent( "onscroll", checkFixed );
}
}
w.FixedFixed = checkFixed;
}( this ));