2010-06-01 30 views
20

Tôi có một số yếu tố <input type="number"> trên trang web của mình. Tôi đang sử dụng jQTouch và tôi luôn cố gắng giữ nguyên chế độ toàn màn hình; nghĩa là cuộn ngang là xấu. Bất cứ khi nào tôi nhấp vào một phần tử <input>, trang cuộn sang phải, hiển thị đường viền màu đen ở bên phải màn hình và bỏ định tâm mọi thứ. Các đầu vào được bù đắp từ bên trái của màn hình, và chúng bắt đầu ở đâu đó ở giữa trang.Ngăn yếu tố <input> di chuyển màn hình trên iPhone?

Làm cách nào để ngăn cuộn này được lấy nét?

+0

có thể trùng lặp của [Disable di chuyển khi thay đổi các yếu tố hình thức tập trung ứng dụng web ipad] (http: //stackoverflow.com/questions/6740253/disable-scrolling-when-changing-focus-form-elements-ipad-web-app) –

+1

Không có câu trả lời nào cho câu hỏi đó cũng như câu hỏi này là chính xác. –

Trả lời

14

Tôi chỉ tìm thấy giải pháp cho vấn đề này trong bài viết này Stop page scrolling from focus

Chỉ cần thêm onFocus="window.scrollTo(0, 0);" đến lĩnh vực đầu vào của bạn và bạn đã hoàn tất! (Đã thử nó với <textarea><input type="text" /> trên iPad, nhưng tôi khá chắc chắn nó cũng sẽ hoạt động trên iPhone.)

Tôi sợ việc cuộn sẽ hiển thị dưới dạng nhấp nháy hoặc gì đó, nhưng may mắn thay đó là không phải vậy!

+0

giải pháp hoàn hảo - được thử nghiệm trên iPod5 iOS7! – Vestalis

+6

Điều này có vẻ như nó sẽ làm việc, nhưng nó không làm việc cho tôi trên iPhone 5S với iOS 8 trong Safari. 'event.preventDefault()' kết hợp với giải pháp của bạn có vẻ như nó chắc chắn sẽ hoạt động, nhưng tôi vẫn nhận được hành vi cuộn mặc định. – Benny

+0

không hoạt động trên iPhone5 iOS10 cordova 7.1.0 kiểm tra cacheflowes câu trả lời. –

6

đây là cách tôi giải quyết này trên iPhone (di động Safari) (Tôi sử dụng jQuery)

1) tạo một biến toàn cầu chứa vị trí cuộn hiện nay, và được cập nhật mỗi khi người dùng cuộn viewport

var currentScrollPosition = 0; 
$(document).scroll(function(){ 
    currentScrollPosition = $(this).scrollTop(); 
}); 

2) liên kết sự kiện trọng tâm với trường nhập được đề cập. khi được lấy nét, hãy cuộn tài liệu đến vị trí hiện tại

$(".input_selector").focus(function(){ 
    $(document).scrollTop(currentScrollPosition); 
}); 

Ta Da! Không gây phiền nhiễu "cuộn trên tiêu điểm"

Một điều cần ghi nhớ ... đảm bảo rằng trường nhập là TRÊN bàn phím, nếu không bạn sẽ ẩn trường. Điều đó có thể dễ dàng giảm nhẹ bằng cách thêm một mệnh đề if.

2

Tôi khuyên bạn nên sử dụng phương thức jQuery.animate() linked to above, không chỉ window.scrollTo (0,0), vì iOS làm động các thuộc tính bù đắp trang khi phần tử đầu vào được tập trung. Gọi window.scrollTo() chỉ một lần có thể không hoạt động với thời gian của hoạt ảnh gốc này.

Để biết thêm nền, iOS đang làm động các thuộc tính pageXOffsetpageYOffset của window. Bạn có thể làm một kiểm tra điều kiện bằng các thuộc tính để đáp ứng nếu cửa sổ đã chuyển:

if(window.pageXOffset != 0 || window.pageYOffset != 0) { 
    // handle window offset here 
} 

Vì vậy, để mở rộng vào liên kết nói trên, đây sẽ là một ví dụ hoàn chỉnh hơn:

$('input,select').bind('focus',function(e) { 
    $('html, body').animate({scrollTop:0,scrollLeft:0}, 'slow'); 
}); 
+0

xác nhận, thiết lập scrollTop không hoạt động, hoạt ảnh với thời gian tối thiểu là 1 mili giây. làm động nó với 0 msecs didnt - có lẽ nó cần phải được thêm vào một hàng đợi sự kiện hoặc một cái gì đó – commonpike

+0

bất kỳ giải pháp cho hành vi jumpy? Có vẻ khủng khiếp khi trang cuộn lên và sau đó lật xuống một lần nữa. preventDefault() không giúp –

0

Nếu tập trung được thiết lập theo chương trình, đây là những gì tôi sẽ làm:

Lưu giá trị scopTop của cửa sổ trước khi thay đổi tiêu điểm. Sau đó, khôi phục scrollTop về giá trị đã lưu ngay lập tức sau khi đặt tiêu điểm.

Nếu sử dụng jQuery:

var savedScrollTop = $(document).scrollTop(); // save scroll position 
<code that changes focus goes here> 
$(document).scrollTop(savedScrollTop); // restore it 
-4

Hãy thử điều này, tôi nghĩ rằng vấn đề là zoom:

<meta name="viewport" content="width=device-width;initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" /> 
+0

Đây là giải pháp thực tế, thêm vào trang của tôi đã cố định cuộn. –

Các vấn đề liên quan