2009-07-23 27 views
14

Vì vậy, tôi đang tuyệt vọng cố gắng lấy một số chức năng cuộn để hoạt động trên một trang. Sau khi không có may mắn, tôi quyết định chỉ cần gắn window.scrollTo(0, 800); trên trang của mình để xem liệu tôi có thể nhận được bất kỳ thao tác cuộn nào xảy ra hay không. Không có gì xảy ra cả. Tôi có một accordion mở rộng và sau đó tôi muốn di chuyển đến một yếu tố cụ thể với nó. Nhưng bây giờ tôi sẽ rất vui khi chỉ nhìn thấy cuộn giấy. Bất cứ ai chạy vào điều này?Phương thức scrollTo JavaScript không làm gì?

Cảm ơn!

+0

Tôi nên lưu ý rằng tôi đã thử plugin scrollTo JQuery mà không có bất kỳ may mắn nào ở đó. $ .scrollTo (0,800); – Nick

+3

Trong firefox trong thanh địa chỉ của tôi, tôi chỉ cần đặt javascript: window.scrollTo (0, 800); và nó dường như hoạt động. – Davis

+0

ok, a. thử nó trong các trình duyệt khác nhau, xem nó có hoạt động không. b. thử một cái gì đó như document.body.scrollTo. c. hãy nhớ rằng javascript phân biệt chữ hoa chữ thường. Không chắc chắn nếu bất kỳ trong số đó sẽ giúp đỡ, nhưng bạn có thể thử. –

Trả lời

14

Tôi đã có thể giải quyết vấn đề này bằng cách sử dụng phương thức jQuery animate(). Dưới đây là ví dụ về việc triển khai mà tôi đã thực hiện với:

$('#content').animate({ scrollTop: elementOffset }, 200); 

Bộ chọn nhận div bằng ID = "content". Sau đó tôi áp dụng phương thức animate trên đó với scrollTop như một tùy chọn. Tham số thứ hai là thời gian tính bằng mili giây cho thời lượng hoạt ảnh. Tôi mong điều này giúp được người nào khác.

+1

Tôi đã thử các câu trả lời khác. Đây là người duy nhất làm việc cho tôi. Sự khác biệt là tôi sử dụng '$ ('body'). Animate ({scrollTop: top}, 0);' where 'top' là biến chứa toạ độ y trong số nguyên. –

-2

Rõ ràng là nó sẽ không cuộn nếu trang của bạn không cao ít nhất (viewport.height - 800). Bạn có thấy thanh cuộn không? Nếu không, bạn đang làm điều gì đó sai trái.

0

Trước tiên, bạn có đủ lớn để cuộn trang (ngay cả khi trang đó nằm trong khung nội tuyến) không? Nếu không, hoặc bạn không chắc chắn, làm một div khổng lồ, sau đó đặt một cái gì đó bên dưới nó. Hãy thử cuộn đến đó.

Tiếp theo, nếu bạn cuộn trong khung nội tuyến, hãy đặt mã của bạn trên cùng một trang với nguồn khung. Bằng cách đó bạn không phải lo lắng về việc nhận tài liệu hoặc phần tử cụ thể trong cửa sổ khác, điều này có thể phức tạp. Oh yeah, bạn có chắc bạn đang nhận được phần đó đúng không? Bước qua với Firebug có thể giúp bạn với điều đó.

Cuối cùng, đặt điểm ngắt (sử dụng Firebug) trên dòng được cho là sẽ khiến quá trình di chuyển xảy ra. Nó có đạt đến điểm ngắt đó không? Nếu không, mã của bạn không thực thi và việc cuộn không phải là vấn đề của bạn.

(Tôi đã trả lời này, với hỗ trợ bối cảnh từ your earlier question.)

EDIT:

cuộn được thực hiện bởi cửa sổ cửa sổ. Nếu bạn đang ở trong một khung không thể cuộn, thì không có gì sẽ cuộn. Nếu bạn muốn phần tử đó trong khung được cuộn đến, lấy phần tử offset của phần tử đó đến cửa sổ hiện tại của nó và thêm nó vào phần bù của khung chứa. Điều đó sẽ làm các trick.

+0

Có, trang có đủ chiều cao. Tôi có thể thấy thanh cuộn. Tôi nghi ngờ rằng vấn đề liên quan đến thành phần của trang này. Vì trang web này đã được tạo trước ngày của trang cái, tôi có một trang chính chứa 2 khung hình. Đầu tiên là thanh điều hướng đầu trang và thanh còn lại là vùng nội dung. Tôi giả định rằng đây là lý do mà phương thức scrollTo dường như không hoạt động. – Nick

+0

yeah, di chuyển được thực hiện cửa sổ theo cửa sổ. nếu bạn đang ở trong một khung không thể cuộn, thì không có gì sẽ cuộn. và bạn sẽ phát điên cố gắng tìm ra điều gì sai. oh ... – geowa4

3

Tôi đã có vấn đề này cùng một ngày hôm nay và sau đó tôi phát hiện ra rằng khi tôi lấy ra tự động tạo khối DOCTYPE:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 

Các window.scrollTo (0800) bắt đầu làm việc cùng với các ExtJs scrollTo() chức năng Ban đầu tôi đã cố gắng sử dụng. Tôi đặt khối trở lại và nó ngừng hoạt động. Tôi không biết nếu đây là những gì bạn đã chạy vào (2 năm trước) nhưng hy vọng điều này sẽ giúp một người khác chạy vào cùng một vấn đề.

21

Nếu bạn có một cái gì đó như thế này:

html, body { height: 100%; overflow:auto; } 

Nếu cả hai cơ thể và html có một định nghĩa độ cao 100% và cũng có chức năng cuộn được kích hoạt, window.scrollTo (và tất cả các cơ chế di chuyển có nguồn gốc) không làm việc, mặc dù một thanh cuộn được hiển thị (có thể được người dùng sử dụng), khi nội dung vượt quá chiều cao cơ thể 100% đó. Điều này là do thanh cuộn bạn nhìn thấy không phải là cửa sổ, mà là thanh cuộn của cơ thể.

Giải pháp:

html { height: 100%; overflow:auto; } 
body { height: 100%; } 
5

Tôi cố định vấn đề này với việc sử dụng một setTimout. Tôi đã sử dụng angularjs nhưng có lẽ nó có thể giúp trong vanilla js quá.

 setTimeout(function() { 
      window.scrollTo(0, 300); 
     },2); 
+0

Đây phải là câu trả lời hay nhất. Cảm ơn. – JulianSoto

1

kiểm tra xem thẻ của bạn đã được cắm vào cuộn có bị tràn CSS [/ - x-y]: bị ẩn hay không. nó đã sửa lỗi

0

Đôi khi nó không chỉ là vấn đề css, Đối với tôi trình duyệt của nó là thủ phạm. Tôi phải giải quyết nó bằng mã này.

if ('scrollRestoration' in window.history) { 
    window.history.scrollRestoration = 'manual' 
} 

Nó cho phép nhà phát triển nắm quyền sở hữu các thay đổi cuộn. Đọc thêm về nó here

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