2009-12-03 34 views
7

Tôi có một số trường biểu mẫu trải rộng trên trang gấp. Khi nhấn phím "tab" để duyệt qua từng trường nhập/chọn, trường sẽ nằm ở trường tiếp theo ở cuối trang gấp.đầu vào trên tiêu điểm hoặc phím tab được bấm, di chuyển đến giữa màn hình

Một vài trường của tôi có mẹo công cụ, phản hồi xác thực và hộp đề xuất tự động xuất hiện bên dưới trường. Khi tabbing vào trường, bạn không thể thấy các phần tử này bên dưới trang gấp.

Có tập lệnh javascript hoặc jQuery nào có thể xoay dọc giữa màn hình xung quanh trường đầu vào/textarea/select/button tập trung thay vì căn chỉnh ở dưới cùng không?

+2

Tôi không biết gì về người khác, nhưng sự thay đổi vị trí màn hình mỗi khi tôi thay đổi trọng tâm sẽ lái xe cho tôi điên * *. Tôi thích một giải pháp chỉ cuộn bù trừ khi một trong các phần tử được yêu cầu không hoàn toàn nằm trong khung nhìn. –

+0

Câu trả lời của tôi cũng phù hợp với bạn? Xin vui lòng cung cấp một bình luận nếu/tại sao không đáp ứng cho vấn đề của bạn – jitter

+0

@Pekka Tôi đồng ý rằng đây là một hành động đặc biệt và sẽ được sử dụng một cách tiết kiệm vì nó sẽ gây phiền nhiễu. Chỉ cần cố gắng nghĩ ra một giải pháp phù hợp - có thể chỉ tập trung vào trường khi "tabbing" không tập trung hoặc có thể trượt hoạt ảnh khi cuộn. Nếu không thì một số cách khác để giữ đầu vào tiêu điểm được đệm từ trang gấp? –

Trả lời

14

Bạn chỉ có thể liên kết với sự kiện lấy nét và sau đó tính toán độ lệch của trường và căn giữa nó trên màn hình.

$(':input').focus(function(){ 
    var center = $(window).height()/2; 
    var top = $(this).offset().top ; 
    if (top > center){ 
     $(window).scrollTop(top-center); 
    } 
}); 
+0

Tôi nghĩ rằng đây là giải pháp đơn giản nhất cho câu hỏi của tôi nhưng như bình luận, hành động không phải là tiêu chuẩn và có thể là một hành động gây phiền nhiễu trong hầu hết các trường hợp - câu hỏi cần được định nghĩa lại một chút để sử dụng thực tế cho giải pháp này. –

+0

Thực hiện một vài kiểm tra, nó nhận được các giá trị đúng nhưng cửa sổ hoặc tài liệu scrollTop() không muốn chơi bóng ... Tôi đã thay đổi điều này thành id div (#div) .scrollTop mà gần như thực hiện nó nhưng isn ' t như phù hợp như tôi mong đợi cơ thể hoặc cửa sổ được. –

+0

Đôi khi có vấn đề với Firefox và/hoặc Chrome. Bạn có thể thử '$ ('html, body') animate ({scrollTop: top - center}, 300);' Làm việc cho tôi – schemar

1

điều dễ nhất sẽ bao gồm các jQuery ScrollTo pluginjQuery Viewport plugin.

Sau đó, bọc mọi đầu vào + các yếu tố khác có liên quan (phản hồi xác thực, ....) trong div.

Kiểm tra tiêu cự nếu div hiển thị hoàn toàn, nếu không sử dụng scrollTo. Làm xong.

Tất nhiên đây là một chút sưng húp nhưng nếu bạn có thể sống với 2 phụ thuộc và thêm ~ 4kb, điều này sẽ hoạt động mà không tự mình thực hiện các phép tính.

1

Same từ trên cao với hiệu ứng cuộn mịn

$(':input').focus(function() { 
     var center = $(window).height()/2; 
     var top = $(this).offset().top; 
     if (top > center) { 
      $('html, body').animate({ scrollTop: top - center }, 'fast');    
     } 
    }); 
+1

tuyệt vời! cảm ơn anh bạn. –

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