2013-10-28 19 views
28

Có vẻ như body.scrollTop (và body.scrollLeft) không được chấp nhận trong chế độ nghiêm ngặt của ES5. Lý do cho điều này là gì, vì nó vẫn có vẻ ổn khi sử dụng các thuộc tính này trên các số khác DOMElement?Tại sao body.scrollTop không được chấp nhận?

Background Thông tin:

Tôi có một chức năng mà cố gắng để tăng (hoặc giảm, theo quy định) các scrollTop giá trị của tất cả các tổ tiên của một element, cho đến khi một trong những thực sự thay đổi. Tôi tự hỏi nếu, để ở lại khiếu nại với chế độ nghiêm ngặt, tôi nên kiểm tra cụ thể chống lại các yếu tố body như chuỗi các bậc cha mẹ di chuyển lên trên.

[Rõ ràng, body đề cập đến document.body]

+3

Điều gì khiến bạn cho rằng chế độ nghiêm ngặt có ảnh hưởng đến điều này? Đặc tả ECMAScript không liên quan đến các đối tượng lưu trữ mà trình duyệt có sẵn trong môi trường trình duyệt (một trong nhiều môi trường có thể sử dụng JavaScript) và chế độ nghiêm ngặt không thể thay đổi chúng. –

+0

Ồ tôi không biết điều đó. Tôi đang phát triển một phần mở rộng chrome và tôi bắt đầu nhận được một loạt các cảnh báo trên bàn điều khiển về body.scrollTop đang bị phản đối chế độ nghiêm ngặt (tôi chỉ định '" sử dụng nghiêm ngặt ";'). Điều này hiện chỉ xảy ra trên Chrome Canary nhưng tôi cho rằng sẽ xảy ra trên bản phát hành Chrome ổn định sớm. –

+0

@ T.J.Crowder Có cách nào tôi có thể tránh các thông điệp cảnh báo trên 'console' (mà tôi đề cập trong bình luận cuối cùng của tôi) ?. Ngoài ra, nếu đặc tả ECMAScript không liên quan đến điều này, tại sao trình duyệt cảnh báo về nó ngay từ đầu? –

Trả lời

34

Đó là hành vi không đúng của Chrome mà bị phản đối, và họ đang cảnh báo giả để ngăn chặn dựa vào nó.

scrolling viewport is represented by document.documentElement (<html>) in standards mode or <body> in quirks mode. (Quirks mode giả lập rendering tài liệu của Navigator 4 và 5. Explorer)

Chrome sử dụng body.scrollTop để đại diện cho vị trí cuộn của viewport trong cả chế độ, đó là sai. Nghe có vẻ như they want to fix this vì vậy họ khuyến khích các tác giả viết kịch bản cho hành vi tiêu chuẩn.

Tôi không nghĩ bạn cần thay đổi mã của mình. Không có gì sai khi sử dụng chế độ tiêu chuẩn body.scrollTop miễn là bạn hiểu nó chỉ đại diện cho vị trí cuộn của body chỉ (thường là 0, trừ khi bạn đã cung cấp body một hộp cuộn).

Bạn có thể thấy cảnh báo bằng cách thực hiện document.body.scrollTop trong giao diện điều khiển:

body.scrollTop bị phản đối trong chế độ nghiêm ngặt. Vui lòng sử dụng documentElement.scrollTop nếu ở chế độ nghiêm ngặt và body.scrollTop chỉ khi ở chế độ quirks.

-5

scrollTop đề cập đến bao nhiêu phần tử được cuộn. Điều này có nghĩa là cơ thể không nên có scrollTop vì nó không bao giờ được cuộn, cơ thể có thanh cuộn trên cùng để nội dung có thể được cuộn nhưng không phải nội dung.
Bức tranh cuối cùng trên trang này giải thích rất nhiều:
https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollTop

+1

Nếu bạn kiểm tra trên bàn điều khiển, 'document.body.srollTop' có giá trị tương đương với số lượng pixel mà trang được cuộn từ trên cùng. –

+0

Xem: http://jsbin.com/ohUdani/1 ([source] (http://jsbin.com/ohUdani/1/edit)) –

+1

Lời xin lỗi của tôi, tôi đã luôn hiểu rằng cơ thể không nên có scrollTop. Rõ ràng tôi sai rồi. –

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