2012-04-28 33 views
7

Tôi không thể tìm thấy giải pháp cho hoạt ảnh để tạo ra thư bị trả lại div, chỉ sử dụng hoạt ảnh jQuery. Một cái gì đó như không hoạt động:Hiệu ứng trả lại jQuery khi nhấp chuột không có giao diện người dùng jQuery

$("#bounce").click(function() { 
    $(this).effect("bounce", { 
     times: 3 
    }, 300); 
});.​ 

Tôi không muốn sử dụng jQuery UI hoặc bất kỳ plugin bên ngoài, chẳng hạn như giảm bớt một. Một hiệu ứng lung lay sẽ chỉ là tốt trong trường hợp của tôi, do đó, hoặc là sẽ làm.

Đây là example, mọi trợ giúp sẽ được đánh giá cao! Cảm ơn trước

+0

tôi sẽ vẫn đề nghị chỉ sử dụng jQueryUI. Tôi cũng do dự khi sử dụng jQueryUI nhưng bạn có thể chọn thành phần nào bạn muốn đưa vào bản tải xuống, bạn chỉ có thể chọn thoát và không có gì khác để tệp js + css sẽ khá nhỏ ~ 15kb – tObi

Trả lời

18

Bạn chỉ có thể chuỗi lại với nhau một số animate cuộc gọi trên các yếu tố như sau:

$("#bounce").click(function() { 
    doBounce($(this), 3, '10px', 300); 
}); 


function doBounce(element, times, distance, speed) { 
    for(var i = 0; i < times; i++) { 
     element.animate({marginTop: '-='+distance}, speed) 
      .animate({marginTop: '+='+distance}, speed); 
    }   
} 

dụ làm việc: http://jsfiddle.net/Willyham/AY5aL/

+1

Ví dụ này dường như không hoạt động – jacktheripper

+0

Xin lỗi, tôi đã quên lưu fiddle. Kiểm tra lại ngay bây giờ. –

+0

cho những người không thể làm việc này, hãy đảm bảo rằng không có thuộc tính chuyển tiếp CSS nào được áp dụng cho phần tử bạn đang cố gắng trả lại. nó có thể can thiệp bởi vì nó thuộc tính CSS mà chúng ta đang thao tác ở đây. – designcise

0

Đối với một thư bị trả lại dọc bạn có thể thử một cái gì đó như thế này:

function bounce(element, distance, speed){ 
var bounce_margin_top = $(element).css("margin-top") 
$(element).css("margin-top", "-="+distance) 

$(element).show().fadeIn(200).animate({ 
    "margin-top": bounce_margin_top 
}, { 
    duration: speed, 
    easing: "easeOutBounce" 
}) 
} 
+0

'easeOutBounce' yêu cầu jQuery Ui. – Sparkup

+0

và trong jQuery Ui bạn chỉ có thể sử dụng lắc – tObi

0

Tôi thường sử dụng jQuery animate. Đối với câu hỏi cụ thể của bạn, nó có thể trông như thế này:

HTML:

<div id="bounce"></div> 

CSS:

#bounce { 
height:50px; 
width:50px; 
background:#333; 
margin-top:50px; 
position:relative; 
} 

Và cuối cùng, jQuery:

$("#bounce").click(function() { 
for (var i=1; i<=3; i++) { 
$(this).animate({top: 30},"slow"); 
$(this).animate({top: 0},"slow"); 
    } 
}); 

Và đây là một fiddle làm việc: http://jsfiddle.net/5xz29fet/1/

4

Sử dụng chức năng này cho bị trả lại bị giảm. Hãy chắc chắn để cung cấp cho các yếu tố nảy một lớp duy nhất nếu sử dụng mã mà không có thay đổi.

var getAttention = function(elementClass,initialDistance, times, damping) { 
 
    for(var i=1; i<=times; i++){ 
 
     var an = Math.pow(-1,i)*initialDistance/(i*damping); 
 
     $('.'+elementClass).animate({'top':an},100); 
 
    } 
 
    $('.'+elementClass).animate({'top':0},100); 
 
} 
 

 
$("#bounce").click(function() { 
 
\t getAttention("bounce", 50, 10, 1.2); 
 
});
#bounce { 
 
    height:50px; 
 
    width:50px; 
 
    background:#f00; 
 
    margin-top:50px; 
 
    position:relative; 
 
    border-radius: 50px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="bounce" class="bounce"></div>

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