2009-02-16 28 views
192

Tôi đang cố gắng tạo hiệu ứng mờ dần cho div & xóa div (id = "thông báo") đó, khi một hình ảnh được nhấp.Làm thế nào để "fadeOut" & "loại bỏ" một div trong jQuery?

Đây là cách tôi làm điều đó:

<a onclick="$("#notification").fadeOut(300,function() { $("#notification").remove(); });" class="notificationClose "><img src="close.png"/></a> 

Điều này dường như không được làm việc. Tôi cần phải làm gì để sửa lỗi này?

+12

15 phiếu cho câu hỏi và 55 phiếu cho câu trả lời ... và rõ ràng đó chỉ là lỗi đánh máy ... wtf? –

+4

Bây giờ là 34 và 110 :). Landed ở đây bởi vì tôi không biết làm thế nào để loại bỏ một yếu tố SAU nó bị mờ dần (bạn có thể đoán: Tôi đã không RTFM). – orique

+3

bất kể lỗi đánh máy, câu hỏi xuất hiện trong kết quả của google và tôi upvote khi tôi tìm thấy câu trả lời một cách nhanh chóng. –

Trả lời

370

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

<a onclick='$("#notification").fadeOut(300, function() { $(this).remove(); });' class="notificationClose "><img src="close.png"/></a> 

Tôi nghĩ rằng dấu ngoặc kép của bạn xung quanh onclick đã làm cho nó không hoạt động. :)

EDIT: Như đã chỉ ra dưới đây, inline javascript là ác và có lẽ bạn nên thực hiện việc này ra khỏi onclick và di chuyển nó đến handler click() sự kiện của jQuery. Đó là cách những đứa trẻ mát mẻ đang làm nó ngày nay.

+3

+1 làm thế nào tôi có thể bỏ qua điều này :) –

+22

Bạn không nên sử dụng nội tuyến JavaScript, bởi vì nó làm cho nó khó thay đổi một cách nhất quán. –

+13

Tôi không tha thứ cho nó, tôi chỉ giúp anh ta giải quyết vấn đề của mình. Thỉnh thoảng tôi thuyết giảng, tôi chỉ thức dậy và không ở trong tâm trạng "thêm dặm". Tuy nhiên, bài đăng của bạn thực hiện công việc.:) –

27

Bạn đã thử điều này chưa?

$("#notification").fadeOut(300, function(){ 
    $(this).remove(); 
}); 

Đó là, sử dụng dòng điện bối cảnh này để nhắm mục tiêu các phần tử trong các chức năng bên trong và không phải là id. Tôi sử dụng mẫu này mọi lúc - nó sẽ hoạt động.

78

bạn thực sự nên cố gắng sử dụng jQuery trong một tệp riêng biệt, không phải nội tuyến. Dưới đây là những gì bạn cần:

<a class="notificationClose "><img src="close.png"/></a> 

Và sau đó điều này ở cuối trang của bạn trong ít nhất hoặc trong tệp JavaScript bên ngoài.

$(".notificationClose").click(function() { 
    $("#notification").fadeOut("normal", function() { 
     $(this).remove(); 
    }); 
}); 
+0

Tôi đã thử điều này nhưng không thể làm cho nó hoạt động. Liên kết nội tuyến ở trên đã hoạt động và cả hai đều giống hệt nhau. Đây là ... http://jsfiddle.net/AndyMP/DBrf5/ – Andy

+1

@Andy: trước hết bạn quên đặt thư viện thành jQuery;) Thứ hai, nếu bạn sử dụng nó trên trang web của mình, bạn cũng cần phải bọc nó trong '$ (document) .ready (function() {' và '});'. (trên jsFiddle nó là onload vì vậy nó làm điều đó cho bạn) – Nathan

+0

@Nick Berardi, chúng ta có thể làm điều đó với trang xuống di chuyển? – Super

47

Nếu bạn đang sử dụng nó ở nhiều nơi khác nhau, bạn nên biến nó thành plugin.

jQuery.fn.fadeOutAndRemove = function(speed){ 
    $(this).fadeOut(speed,function(){ 
     $(this).remove(); 
    }) 
} 

Và sau đó:

// Somewhere in the program code. 
$('div').fadeOutAndRemove('fast'); 
+0

Tôi chỉ xem xét cách thực hiện điều này, và với mục đích của mình, cách "plugin" tốt hơn cho tôi, nhờ – harag

-7

Sử dụng

.fadeOut(360).delay(400).remove(); 
+3

Điều này không có tác dụng, phương thức 'remove' được gọi ngay sau' fadeOut' –

1

nếu bạn là bất cứ điều gì như tôi đến từ một tìm kiếm google và tìm cách để loại bỏ một yếu tố html với hoạt hình mát mẻ, thì đây có thể giúp bạn:

$(document).ready(function() { 
 
    
 
    var $deleteButton = $('.deleteItem'); 
 

 
    $deleteButton.on('click', function(event) { 
 
    
 
     event.preventDefault(); 
 

 
     var $button = $(this); 
 

 
     if(confirm('Are you sure about this ?')) { 
 

 
      var $item = $button.closest('tr.item'); 
 

 
      $item.addClass('removed-item') 
 

 
       .one('webkitAnimationEnd oanimationend msAnimationEnd animationend', function(e) { 
 

 
        $(this).remove(); 
 
      }); 
 
     } 
 
     
 
    }); 
 
    
 
});
/** 
 
* Credit to Sara Soueidan 
 
* @link https://github.com/SaraSoueidan/creative-list-effects/blob/master/css/styles-3.css 
 
*/ 
 

 
.removed-item { 
 
    -webkit-animation: removed-item-animation .8s cubic-bezier(.65,-0.02,.72,.29); 
 
    -o-animation: removed-item-animation .8s cubic-bezier(.65,-0.02,.72,.29); 
 
    animation: removed-item-animation .8s cubic-bezier(.65,-0.02,.72,.29) 
 
} 
 

 
@keyframes removed-item-animation { 
 
    0% { 
 
     opacity: 1; 
 
     -webkit-transform: translateX(0); 
 
     -ms-transform: translateX(0); 
 
     -o-transform: translateX(0); 
 
     transform: translateX(0) 
 
    } 
 

 
    30% { 
 
     opacity: 1; 
 
     -webkit-transform: translateX(50px); 
 
     -ms-transform: translateX(50px); 
 
     -o-transform: translateX(50px); 
 
     transform: translateX(50px) 
 
    } 
 

 
    80% { 
 
     opacity: 1; 
 
     -webkit-transform: translateX(-800px); 
 
     -ms-transform: translateX(-800px); 
 
     -o-transform: translateX(-800px); 
 
     transform: translateX(-800px) 
 
    } 
 

 
    100% { 
 
     opacity: 0; 
 
     -webkit-transform: translateX(-800px); 
 
     -ms-transform: translateX(-800px); 
 
     -o-transform: translateX(-800px); 
 
     transform: translateX(-800px) 
 
    } 
 
} 
 

 
@-webkit-keyframes removed-item-animation { 
 
    0% { 
 
     opacity: 1; 
 
     -webkit-transform: translateX(0); 
 
     transform: translateX(0) 
 
    } 
 

 
    30% { 
 
     opacity: 1; 
 
     -webkit-transform: translateX(50px); 
 
     transform: translateX(50px) 
 
    } 
 

 
    80% { 
 
     opacity: 1; 
 
     -webkit-transform: translateX(-800px); 
 
     transform: translateX(-800px) 
 
    } 
 

 
    100% { 
 
     opacity: 0; 
 
     -webkit-transform: translateX(-800px); 
 
     transform: translateX(-800px) 
 
    } 
 
} 
 

 
@-o-keyframes removed-item-animation { 
 
    0% { 
 
     opacity: 1; 
 
     -o-transform: translateX(0); 
 
     transform: translateX(0) 
 
    } 
 

 
    30% { 
 
     opacity: 1; 
 
     -o-transform: translateX(50px); 
 
     transform: translateX(50px) 
 
    } 
 

 
    80% { 
 
     opacity: 1; 
 
     -o-transform: translateX(-800px); 
 
     transform: translateX(-800px) 
 
    } 
 

 
    100% { 
 
     opacity: 0; 
 
     -o-transform: translateX(-800px); 
 
     transform: translateX(-800px) 
 
    } 
 
}
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
    <meta charset="utf-8"> 
 
    <meta name="viewport" content="width=device-width"> 
 
    <title>JS Bin</title> 
 
</head> 
 
<body> 
 
    
 
    <table class="table table-striped table-bordered table-hover"> 
 
    <thead> 
 
     <tr> 
 
     <th>id</th> 
 
     <th>firstname</th> 
 
     <th>lastname</th> 
 
     <th>@twitter</th> 
 
     <th>action</th> 
 
     </tr> 
 
    </thead> 
 
    <tbody> 
 
     
 
     <tr class="item"> 
 
     <td>1</td> 
 
     <td>Nour-Eddine</td> 
 
     <td>ECH-CHEBABY</td> 
 
     <th>@__chebaby</th> 
 
     <td><button class="btn btn-danger deleteItem">Delete</button></td> 
 
     </tr> 
 
     
 
     <tr class="item"> 
 
     <td>2</td> 
 
     <td>John</td> 
 
     <td>Doe</td> 
 
     <th>@johndoe</th> 
 
     <td><button class="btn btn-danger deleteItem">Delete</button></td> 
 
     </tr> 
 
     
 
     <tr class="item"> 
 
     <td>3</td> 
 
     <td>Jane</td> 
 
     <td>Doe</td> 
 
     <th>@janedoe</th> 
 
     <td><button class="btn btn-danger deleteItem">Delete</button></td> 
 
     </tr> 
 
    </tbody> 
 
    </table> 
 
    
 
<script src="https://code.jquery.com/jquery.min.js"></script> 
 
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" type="text/css" /> 
 

 

 
</body> 
 
</html>

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