2012-01-08 70 views
5

Tôi đang cố gắng tạo một div để trượt ra và khi di chuột tức là chuột vào và rời, tương ứng. Tuy nhiên, khi tôi lơ lửng vào và ra nhiều lần, các div giữ trượt qua lại về cơ bản lên đến số lần tôi đã di chuột. Vui lòng tham khảo số jsFiddle example này.Hoạt ảnh jQuery: Dừng hoạt ảnh khi di chuột ra

Như bạn có thể đoán, tôi hy vọng sẽ dừng chân div (tức là trượt vào) khi con chuột ở bên ngoài phần tử bất kể số lần tôi đã di chuột qua nó. Tôi nghĩ rằng có một cái gì đó còn thiếu trong sự hiểu biết của tôi về hoạt hình jQuery.

$("#state-slider").hover(function() { 
    $(this).animate({ 
    left: '0' 
    }, 500); 
}, function() { 
    $(this).animate({ left: "-270" }, 500); 
}); 

Cảm ơn bạn.

Trả lời

17

Bạn cần jQuery .stop() function. Chèn nó vào chuỗi lệnh của bạn trước khi bạn bắt đầu một hoạt ảnh mới, để làm gián đoạn mọi hoạt ảnh đang diễn ra.

$('#state-slider').hover(function() { 
    $(this).stop().animate({ left: 0 }, 500); 
}, function() { 
    $(this).stop().animate({ left: -270 }, 500); 
}); 

Working jsFiddle =)

+0

Điều này hoạt động hoàn hảo. Cảm ơn bạn! Bạn có biết tại sao chúng ta cũng cần '.stop()' khi nhập chuột? Tôi biết chúng ta cần phải có nó bởi vì nếu không sẽ có một "nhảy" như trong câu trả lời của @ 3nigma; tuy nhiên, tôi không chắc chắn lý do đằng sau nó. – moey

+2

@ Siku-Siku.Com: Lý do cho việc sử dụng '.stop()' trên cả chuột và chuột sẽ trở nên rõ ràng nếu bạn di chuột qua div, di chuyển nó đi và sau đó nhanh chóng quay trở lại. Những gì người dùng mong đợi từ đó là div để "quay lại", tức là * ngừng những gì nó đang làm và làm điều mới thay thế *. Đó chính xác là những gì '.stop()' thực hiện. –

+0

+1 để làm rõ! – moey

1
$("#state-slider").hover(function() { 
    $(this).animate({ 
    left: '0' 
    }, 500); 
}, function() { 
    $(this).stop(true,true).animate({ left: "-270" }, 500); 
}); 

DEMO

http://api.jquery.com/stop/

+0

Cảm ơn bạn, @ 3nigma. Tuy nhiên, lưu ý rằng có một "nhảy" khi bạn nhập vào 'div' và ngay lập tức. Tôi nghĩ chúng ta cũng cần '.stop()' khi nhập chuột? – moey

+0

Ah, tôi đã nhận nó ngay bây giờ: để ngăn chặn "nhảy", sử dụng 'stop (true)' thay vì 'stop (true, true)'. – moey

0

có là một ví dụ

http://jsfiddle.net/amkrtchyan/TQz5U/1/

và mã jquery

$(function() { 
    $("#state-slider").hover(function() { 
     $(this).stop(true,true).animate({ 
      left: '0' 
     }, 500); 
    }, function() { 
     $(this).stop(true,true).animate({ left: "-270" }, 500); 
    }); 
}); 
Các vấn đề liên quan