jQuery检查浏览器是否支持位置:已修复
如何检查浏览器是否支持position:fixed
使用jQuery position:fixed
。 我想我必须使用$.support
,但是怎么样?
感谢您的时间。
最可靠的方法是对它进行实际的function测试。 浏览器嗅探是脆弱和不可靠的。
我在CFT http://kangax.github.com/cft/#IS_POSITION_FIXED_SUPPORTED中有一个这样的测试示例。 请注意,应在加载document.body
后运行测试。
我发现移动safari(特别是iOS 4.2通过OSX上的iOS模拟器)拒绝在任何地方滚动,除非你等待几毫秒。 因此误报。
我写了一个快速的jquery插件来解决它:
(function($) { $.support.fixedPosition = function (callback) { setTimeout( function () { var container = document.body; if (document.createElement && container && container.appendChild && container.removeChild) { var el = document.createElement('div'); if (!el.getBoundingClientRect) return null; el.innerHTML = 'x'; el.style.cssText = 'position:fixed;top:100px;'; container.appendChild(el); var originalHeight = container.style.height, originalScrollTop = container.scrollTop; container.style.height = '3000px'; container.scrollTop = 500; var elementTop = el.getBoundingClientRect().top; container.style.height = originalHeight; var isSupported = !!(elementTop === 100); container.removeChild(el); container.scrollTop = originalScrollTop; callback(isSupported); } else { callback(null); } }, 20 ); } })(jQuery);
function fixedcheck () { var fixedDiv = $('').css('position', 'fixed').appendTo('body'); var pos1 = fixedDiv.offset().top; $(window).scrollTop($(window).scrollTop() + 1); var pos2 = fixedDiv.offset().top; fixedDiv.remove(); return (pos1 != pos2) } /* Usage */ $(document).ready(function () { if (!fixedcheck()) alert('Your browser does not support fixed position!') });
您可以通过制作如下代码来检查位置是否存在:
Hi
由于位置存在于所有主浏览器中,因此总是返回true。 我想有没有办法检查位置的可能值,所以你必须检查用户正在查看你的页面的浏览器和版本,如Paolo Bergantino所说。
position:fixed
显然适用于Mobile Safari(4.3.2)中除body之外的所有块元素,因此CFT答案(http://kangax.github.com/cft/#IS_POSITION_FIXED_SUPPORTED)应该包含:
var isSupported = (container.scrollTop === 500 && elementTop === 100);
上面提到的function测试位置固定支持在Opera Mini上返回误报(它不支持position:fixed)。
我创建了另一个检查,如果在浏览器中确实支持position:fixed
。 它创建固定div并尝试滚动并检查div的位置是否发生了变化。
function isPositionFixedSupported(){ var el = jQuery(""); el.appendTo("body"); var prevScrollTop = jQuery(document).scrollTop(); var expectedResult = 1+prevScrollTop; var scrollChanged = false; //simulate scrolling if (prevScrollTop === 0) { window.scrollTo(0, 1); expectedResult = 2; scrollChanged = true; } //check position of div suppoorted = (el.offset().top === expectedResult); if (scrollChanged) { window.scrollTo(0, prevScrollTop); } el.remove(); return suppoorted; }
此function在Firefox 22,Chrome 28,IE 7-10,Android Browser 2.3中进行了测试。