我正在尝试查找一个脚本,用于检测设备是否相对于ViewPort放置position: fixed
元素而不是整个文档。
目前,标准桌面浏览器和Mobile Safari(适用于iOS 5)都这样做,而Android设备则将固定元素相对于整个文档放置。
我已经找到了几个检测这个的测试,但似乎没有一个可行:
是否有人知道在哪里找到/如何编写实际检测到的测试?我不想依赖浏览器嗅探。
答案 0 :(得分:9)
根据Modernizr的贡献者,如果不检测正在使用的浏览器,则无法执行此操作。贡献者在该领域非常成熟。
在iOS和Android设备上测试position: fixed
列在Modernizr项目的Undetectables wiki page下。
MobileHTML5 website列出了对position:fixed
的支持。 http://mobilehtml5.org/
答案 1 :(得分:5)
实际上,来自Filament Group的人们用他们的Fixedfixed做了一件很聪明的事情,在他们的测试中放入了已知误报的用户代理字符串。
检查@ http://github.com/filamentgroup/fixed-fixed
有人可以用一些假阴性来完成它,并使其成为现代化的附加特征测试。
答案 2 :(得分:1)
如果浏览器确实支持position:fixed
,我已创建了另一项检查。它创建固定的div并尝试滚动并检查div的位置是否发生了变化。
function isPositionFixedSupported(){
var el = jQuery("<div id='fixed_test' style='position:fixed;top:1px;width:1px;height:1px;'></div>");
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;
}
此功能已在Firefox 22,Chrome 28,IE 7-10,Android Browser 2.3中进行了测试。