2011-03-23 6 views
16

Tôi có một thanh cố định ở cuối mỗi trang trên trang web của tôi bằng cách sử dụng vị trí: cố định. Vấn đề là trên các thiết bị như iPhone hoặc iPad, tài sản này không được tôn trọng.Cách giải quyết vị trí: cố định cho thanh công cụ dưới cùng trên iOS (iPhone/iPad)

Tôi cố gắng để sử dụng javascript để detec chiều cao màn hình, di chuyển vị trí, và các công trình này một cách hoàn hảo trên iPad:

$(window).scroll(function () { $("#bar").css("top", ($(window).height() + $(document).scrollTop() - 90) +"px"); }); 

Như bạn có thể thấy tôi đang sử dụng jQuery. Vấn đề là mã này không hoạt động trên iPhone vì chiều cao của cửa sổ không bao gồm thanh vị trí (và cả thanh gỡ lỗi nếu có), vì vậy thanh này đi đúng vị trí lúc đầu, nhưng khi bạn cuộn nó cố định ở trên vị trí bên phải (số lượng pixel được sử dụng bởi thanh địa chỉ của Mobile Safari).

Có cách nào để lấy thông tin này và sửa chữa đúng thanh công cụ này không?

Xin lưu ý đây không phải là trang web được tạo cho iPhone, vì vậy tôi không thể sử dụng các thủ thuật như iScroll.

+2

+1 cho mã tương thích với iPad. Tôi sẽ xem ở đây để có câu trả lời :) –

+0

Dường như iOS 5 đã giải quyết những vấn đề này bằng cách diễn giải chính xác vị trí: các yếu tố cố định. –

+0

Có lẽ khi nó ra Beta tôi sẽ có một cái nhìn. –

Trả lời

1
+2

Thú vị làm thế nào hai trong số những liên kết cho tôi biết chỉ cần bỏ cuộc, tôi tự hỏi nếu điều này là có thể đạt được ở tất cả. –

+2

Nếu bạn tìm thấy giải pháp, vui lòng cho chúng tôi biết, bạn có thể trả lời các câu hỏi của riêng bạn trong SO. –

+1

http://distill.engineyard.com/archive#home. Tiêu đề liên tục của trang web này là ít lỗi nhất mà tôi đã thấy. Có lẽ có điều gì đó họ đang làm để giải quyết vấn đề? – sheriffderek

-2

Cảm ơn Google, không phải là tôi:

http://code.google.com/mobile/articles/webapp_fixed_ui.html

Khá đơn giản, thực sự.

+0

Như tôi đã đề cập từ khi bắt đầu: "Có trong tâm trí này không phải là một trang web được thực hiện cho iPhone, vì vậy tôi không thể sử dụng thủ đoạn như iScroll cả." Đây chính là mẹo đó. –

+1

Mã từ Google là điểm khởi đầu tốt. Tuy nhiên, tôi nghĩ rằng đó là lỗi (tôi nghĩ rằng dòng mà đọc 'this.element = this;' nên được 'this.element = element;') và nó không đầy đủ (một số chức năng chính còn lại "như bài tập cho người đọc"). Lấy các chi tiết của động lượng, bị trả lại, v.v. Chính xác đúng là REALLY quan trọng, và đó là những gì còn lại. Tôi rất muốn thấy việc triển khai các phương pháp còn thiếu! – mattstuehler

+2

Liên kết nổi bật trong câu trả lời này giờ đã chết. – EleventyOne

1

Tôi vừa làm một cái gì đó như thế này, dán điều hướng vào TOP của cửa sổ. Điều hướng bắt đầu bên dưới tiêu đề rồi đánh dấu nếu bạn cuộn qua nó. iOS5 hỗ trợ định vị cố định. Mục sẽ chụp theo vị trí SAU đầu cuộn, nhưng vẫn hoạt động tốt. '#sticky-anchor' là div bao bọc xung quanh điều hướng của tôi.

Đừng nhớ nơi tôi đã tìm thấy tất cả những điều này, có rất nhiều phần từ nhiều trang web. Bạn có thể điều chỉnh để phù hợp với nhu cầu của mình.

$(window).scroll(function(event){ 

// sticky nav css NON mobile way 
    sticky_relocate(); 

    var st = $(this).scrollTop(); 

// sticky nav iPhone android mobile way 
// iOS 4 and below 

    if (navigator.userAgent.match(/OS 5(_\d)+ like Mac OS X/i)) { 
     //do nothing uses sticky_relocate above 
    } else if (navigator.userAgent.match(/(iPod|iPhone|iPad)/i) || navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i)) { 

     var window_top = $(window).scrollTop(); 
     var div_top = $('#sticky-anchor').offset().top; 

     if (window_top > div_top) { 
      $('#sticky').css({'top' : st , 'position' : 'absolute' }); 
     } else { 
      $('#sticky').css({'top' : 'auto' }); 
     } 
    }; 
}; 
0

iScroll probaply sự là giải pháp đơn giản nhất để vấn đề của bạn. Trái ngược với bạn tin rằng nó cũng hoạt động cho android và opera. Phiên bản mới của nó đang hoạt động tuyệt vời.

http://cubiq.org/iscroll-4

0

này chút mã jquery làm việc cho tôi:

if(navigator.platform == 'iPad' || navigator.platform == 'iPhone' || navigator.platform == 'iPod'){ 
    $("#footer_menu").css("position", "fixed").css("top", $('window').height()); 
}; 

nếu không css cho #footer_menu là:

position:fixed; 
bottom:0; 
width:100%; 
padding:5px 0; 
text-align:center; 
height:44px; 

Tôi nghĩ rằng việc thiết lập chiều cao giúp với render đúng cách và trên trình duyệt trên máy tính để bàn, tôi muốn menu này được cố định ở cuối cửa sổ trình duyệt.

1

Tôi đã sửa lỗi này trên trang web của mình và đã trả lời câu hỏi này trên Stack Overflow. Kể từ đó tôi đã nhận được rất nhiều lời cảm ơn từ những người đã thực hiện nó. Xin lỗi tôi không có thời gian cho một bản tóm tắt.

https://stackoverflow.com/a/10030251/1118070

3

Kể từ iOS 8.4, bạn có thể sử dụng position: sticky; tương ứng position: -webkit-sticky; để sửa lỗi này.