2011-12-23 35 views
8

Tôi có đoạn mã sau:jQuery .animate() bộ hiển thị: không, cách tránh?

HTML:

<div id="clickme"> 
    Click me :-) 
</div> 

<div id="info" style="background:red; width:100%; height:100px; margin-bottom:-100px; z-index:20; position:absolute; bottom:0px;"> 
    Stay, damn! 
</div> 

JavaScript:

$('#clickme').click(function() { 
    $('#info').animate({ 
     marginBottom: 'toggle' 
    },{ 
     duration:500 
    }); 
}); 

Nó cũng có sẵn tại http://jsfiddle.net/DxnQJ/

Rõ ràng, tôi muốn #info DIV xuất hiện/biến mất bất cứ khi nào các #clickme DIV được nhấp. Nó hoạt động như dự định, ngoại trừ việc #info DIV biến mất sau khi hoạt ảnh do jQuery đặt thuộc tính CSS display thành none.

Làm cách nào để tôi có thể yêu cầu jQuery ngừng ẩn số DIV của mình?

+2

Kiểm tra nguồn jQuery, có vẻ như 'toggle' được thiết kế cho các hiệu ứng hoàn toàn được hiển thị hoặc ẩn (như chiều cao, chiều rộng và độ mờ). Điều gì xảy ra là nhấp vào 'Nhấp vào tôi :-)' và hoạt ảnh không được ẩn lần đầu tiên có tác dụng tương tự như khi bạn có 'marginBottom: 'hide''. Vì vậy, khi nó được thực hiện hoạt hình, 'jQuery (elem) .hide();' được gọi trên phần tử của bạn. – zkhr

Trả lời

0

Thay thế chức năng nhấp chuột của bạn với điều này hoạt động:

$('#clickme').click(function() { 
     var whichSetting = $('#info').css('marginBottom'); 
     if(whichSetting == '-100px') { 
      whichSetting = '0px'; 
     } 
     else { 
      whichSetting = '-100px'; 
     } 
     $('#info').animate({ 
      marginBottom: whichSetting 
      },{ 
       duration:500 
     }); 

    }); 
+0

Bỏ phiếu xuống là gì? Nó có thể không thanh lịch như giải pháp .slideToggle, nhưng nó hoạt động tốt. Và nó làm cho nó hoạt động với marginBottom, đó là những gì các poster đã có. – Patches