2012-04-02 11 views
8

Tôi đang cố tìm một tập lệnh phát hiện xem thiết bị có đặt các phần tử position: fixed liên quan đến ViewPort chứ không phải toàn bộ tài liệu.Phát hiện tính năng cho vị trí: cố định

Hiện tại, các trình duyệt dành cho máy tính để bàn tiêu chuẩn và Mobile Safari (dành cho iOS 5) làm như vậy, trong khi thiết bị Android đặt các phần tử cố định liên quan đến toàn bộ tài liệu.

Tôi đã tìm thấy một vài xét nghiệm để phát hiện điều này, nhưng không ai trong số những vẻ làm việc:

Có ai biết nơi để tìm thấy/làm thế nào để viết một bài kiểm tra đó thực sự phát hiện đó? Tôi không muốn dựa vào trình duyệt đánh hơi.

Trả lời

9

Theo các cộng tác viên tại Modernizr, bạn không thể thực hiện việc này mà không phát hiện trình duyệt đang sử dụng. Những người đóng góp khá thành lập trong lĩnh vực này.

Thử nghiệm cho position: fixed trên thiết bị iOS và Android được liệt kê trong Undetectables wiki page trong dự án Modernizr.

MobileHTML5 website liệt kê hỗ trợ cho position:fixed. http://mobilehtml5.org/

+0

Thật đáng buồn ... nhưng cảm ơn rất nhiều vì đã tham khảo! –

5

Trên thực tế, những kẻ từ nhóm Filament đã làm một điều thông minh với Fixedfixed của họ đặt chuỗi tác nhân người dùng của các xác thực sai đã biết trong thử nghiệm của họ.

Kiểm tra nó @http://github.com/filamentgroup/fixed-fixed

Ai đó có thể hoàn thành nó với một số âm tính giả quá, và làm cho nó một Modernizr kiểm tra featur aditional.

1

Tôi đã tạo một kiểm tra khác nếu position:fixed thực sự được hỗ trợ trong trình duyệt. Nó tạo ra div cố định và cố gắng cuộn và kiểm tra xem vị trí của div đã thay đổi chưa.

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; 
} 

Chức năng này đã được thử nghiệm trong Firefox 22, Chrome 28, IE 7-10, Trình duyệt Android 2.3.