2013-05-10 50 views
133

Tôi đặt trang để cuộn lên trên cùng khi một nút được nhấp. Nhưng trước tiên, tôi đã sử dụng câu lệnh if để xem đầu trang có được đặt thành 0. Sau đó, nếu không phải 0 Tôi tạo hiệu ứng cho trang để cuộn lên trên cùng.jQuery .scrollTop(); + hoạt hình

var body = $("body"); 
var top = body.scrollTop() // Get position of the body 

if(top!=0) 
{ 
    body.animate({scrollTop:0}, '500'); 
} 

Phần khó khăn hiện đang hoạt ảnh gì đó SAU KHI trang đã cuộn lên trên cùng. Vì vậy, suy nghĩ tiếp theo của tôi là, tìm hiểu vị trí trang là gì. Vì vậy, tôi sử dụng giao diện điều khiển đăng nhập để tìm hiểu.

console.log(top); // the result was 365 

này đã cho tôi một kết quả của 365, tôi đoán đó là số vị trí tôi đang ở ngay trước khi di chuyển lên trên cùng.

Câu hỏi của tôi là làm cách nào để đặt vị trí là 0, để tôi có thể thêm một hoạt ảnh khác chạy khi trang ở 0?

Cảm ơn!

+1

cần có những nút mà bạn kích hoạt sự kiện luôn hiển thị? Nếu không thì tôi có một mã mà không cần bất kỳ loại điều kiện nào có thể làm dễ dàng cho điều kiện đầu tiên của bạn –

+0

Không nên có dấu ngoặc kép trong khoảng mili giây. "Chuỗi" tài liệu tham khảo là chậm/nhanh – mplungjan

Trả lời

238

Để thực hiện việc này, bạn có thể đặt chức năng gọi lại cho lệnh animate sẽ thực thi sau khi hoạt ảnh cuộn đã hoàn tất.

Ví dụ:

var body = $("html, body"); 
body.stop().animate({scrollTop:0}, 500, 'swing', function() { 
    alert("Finished animating"); 
}); 

đâu rằng mã cảnh báo là, bạn có thể thực hiện nhiều javascript để thêm vào trong phim hoạt hình hơn nữa.

Ngoài ra, 'xoay' nằm ở đó để đặt độ nới lỏng. Hãy xem http://api.jquery.com/animate/ để biết thêm thông tin.

+1

Cảm ơn Thomas, đó là những gì tôi cần. Tôi cũng đã thêm một sự chậm trễ kể từ khi lớp được thêm quá nhanh. nếu (trên! = 0) { console.log ("cuộn ẩn"); body.animate ({scrollTop: 0}, '500', 'swing', function() { \t console.log ("Đã hoàn tất hoạt ảnh"); \t leftitems.delay (1000) .removeClass ("slide") ; \t }); } –

+0

Tôi đã đề cập đến thời lượng hoạt ảnh mà không có dấu ngoặc kép khi tôi chỉ có 2 tham số cho hàm động. Điều đó thật kỳ lạ. – iMatoria

+5

Tôi không chắc liệu đó là vì bài đăng này là 4 tuổi, nhưng tôi nghĩ trong các phiên bản mới hơn của jQuery, bạn cần phải loại bỏ các dấu nháy đơn đó xung quanh thời gian: body.animate ({scrollTop: 0}, 500, 'swing' , function() { alert ("Đã hoàn thành hoạt ảnh"); }); – Andrew

4

cho điều này bạn có thể sử dụng phương pháp gọi lại

body.animate({ 
     scrollTop:0 
    }, 500, 
    function(){} // callback method use this space how you like 
); 
6

Hãy thử điều này thay vì:

var body = $("body, html"); 
var top = body.scrollTop() // Get position of the body 
if(top!=0) 
{ 
     body.animate({scrollTop :0}, 500,function(){ 
     //DO SOMETHING AFTER SCROLL ANIMATION COMPLETED 
      alert('Hello'); 
     }); 
} 
35

Hãy thử mã này:

$('.Classname').click(function(){ 
     $("html, body").animate({ scrollTop: 0 }, 600); 
     return false; 
}); 
+3

'$ (" html ")', vì trong trường hợp của bạn nếu bạn thêm hàm gọi lại, hàm này sẽ được gọi hai lần, một lần cho * html * và một lần cho * body *. Và sử dụng * body * không làm gì cả. – Flawyte

+5

có vẻ như tùy thuộc vào trình duyệt. trong một số, $ ('html') có thể không làm gì cả, vì vậy bạn cần phải sử dụng cả hai, và chăm sóc gọi lại được kích hoạt hai lần. – commonpike

20

Sử dụng này:

$('a[href^="#"]').on('click', function(event) { 

    var target = $($(this).attr('href')); 

    if(target.length) { 
     event.preventDefault(); 
     $('html, body').animate({ 
      scrollTop: target.offset().top 
     }, 500); 
    } 

}); 
+0

Đây là cách tốt nhất. Cảm ơn rất nhiều. – programmer138200

+0

np hy vọng bạn tìm thấy nó hữu ích – Beep

+0

Một phiếu bầu cho điều này, tốt đẹp và súc tích. – phynam

2

Mã với chức năng nhấp chuột()

var body = $('html, body'); 

    $('.toTop').click(function(e){ 
     e.preventDefault(); 
     body.animate({scrollTop:0}, 500, 'swing'); 

}); 

.toTop = lớp của nguyên tố nhấp lẽ img hoặc a

0
jQuery("html,body").animate({scrollTop: jQuery("#your-elemm-id-where you want to scroll").offset().top-<some-number>}, 500, 'swing', function() { 
     alert("Finished animating"); 
    }); 
0

Giải pháp đơn giản:

di chuyển đến bất kỳ yếu tố theo ID hoặc TÊN:

SmoothScrollTo("elementId", 1000); 

code:

function SmoothScrollTo(id_or_Name, timelength){ 
    var timelength = timelength || 1000; 
    $('html, body').animate({ 
     scrollTop: $("#"+id_or_Name).offset().top-70 
    }, timelength, function(){ 
     window.location.hash = id_or_Name; 
    }); 
} 
Các vấn đề liên quan