Reputation: 1320
On the following page, hovering on a text appends a div with a text with a slide effect. The problem is that when it slides up back to delete div, mouse-entering again on a text stops sliding and div remains without a text. Entering and leaving fast appends div's. How can I resume sliding down in that case?
index.html
<!DOCTYPE html>
<html>
<head>
<script src = "http://code.jquery.com/jquery-1.10.1.min.js" type = "text/javascript"></script>
<script src = "script.js" type = "text/javascript"></script>
</head>
<body>
<div id = "main_div" style = "width: 33%">
<div id = "hover_div">
<h1 style = "width: 300px; background-color: blue; margin: 0; border: 1px solid #DDDDDD" id = "text1">Hover to see the truth</h1>
</div>
</div>
</body>
</html>
script.js
$(document).ready (function() {
$(document).on ("mouseenter", "#text1", function() {
$("#main_div").append ("<div style = 'background-color: red; width: 300px; height: 200px; margin: 0; border: 1px solid #DDDDDD' id = 'descr'></div>");
$("#descr")
.hide()
.append ("<h3 id = 'truth' style = 'float: left; height: 100px'>You're an idiot</h3>")
.slideDown ("slow");
});
$(document).on ("mouseleave", "#text1", function() {
$("#descr").slideUp ("slow", function() {
$(this).remove();
});
});
$(document).on ("mouseenter", "#descr", function() {
$("#descr").slideUp ("slow", function() {
$(this).remove();
});
});
});
Demo: Fiddle
Upvotes: 0
Views: 108
Reputation: 10880
Simply add
$("#descr").remove();
just after
$(document).on ("mouseenter", "#text1", function() {
Demo - http://jsbin.com/efoqux/1/edit or http://jsfiddle.net/atif089/prS8R/6/
Upvotes: 1
Reputation: 94499
Check if the element is animated before performing any other animations.
$(document).on ("mouseenter", "#text1", function() {
//Do not append div multiple times
if($("#descr").length ==0){
$("#main_div").append ("<div style = 'background-color: red; width: 300px; height: 200px; margin: 0; border: 1px solid #DDDDDD' id = 'descr'></div>");
}
//Guard against animation
if($("#descr").is(":animated")){
return false;
}
$("#descr")
.hide()
.append ("<h3 id = 'truth' style = 'float: left; height: 100px'>You're an idiot</h3>")
.slideDown ("slow");
});
$(document).on ("mouseleave", "#text1", function() {
//Guard against animation
if($("#descr").is(":animated")){
return false;
}
$("#descr").slideUp ("slow", function() {
$(this).remove();
});
});
$(document).on ("mouseenter", "#descr", function() {
if($("#descr").is(":animated")){
return false;
}
$("#descr").slideUp ("slow", function() {
$(this).remove();
});
});
Working Example http://jsfiddle.net/DJTmt/
Upvotes: 0