jQuery, Javascript, stop the execution of a animation / function

Hi E's. I have a script where will run a animation. The animation start automatic after load the page. The code have a "div stop" that if I click, the function demo() will stop execution (In my example the animation is approximately 10 seconds long (but can be much more time, and that is the reason for can stop the animation in the middle of the execution).
Here is my code:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Untitled Document</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<style type="text/css">
#geral{position: absolute; width: 600px; height: 600px;}
#piece{position: absolute; width: 13px; height: 20px; left: 20px; top: 150px;}

/* the new element (for show after the first stage):*/
#square{position: absolute; width: 20px; height: 20px; background-color: red; display:none; left: 500px; top: 500px;}
</style>
</head> 
<body> 
<div id="geral">
<div id="piece"><img src="ponteiro_rato.png" alt="Rato" width="13" height="20" /></div>
<div id="square"></div>
<div id="stop">stop demonstration</div>
</div>
<script>
demo();
function demo(){
$('#piece').animate({ left: '500', top: '500' }, 2500, function(){
      $('#square').show();
      var t = setTimeout(function(){
            $('#square').hide();
            $('#piece').animate({ left: '150', top: '100' }, 2500);
      },5000);
});
}

$("#stop").click(function(){
    //DO SOMETHING HERE TO STOP THE EXECUTION OF THE FUNCTION demo()
});
</script> 
</body> 
</html>
</body> 
</html>

Open in new window

What I have to write in line 34 for stop the execution of function demo()?

The best regards, JC
LVL 3
Pedro ChagasWebmasterAsked:
Who is Participating?
 
leakim971Connect With a Mentor PluritechnicianCommented:
forget the class one, use : $("#ID_OF_THE_DIV1,#ID_OF_THE_DIV3,#ID_OF_THE_DIV2")
0
 
leakim971PluritechnicianCommented:
Use : http://api.jquery.com/stop/

So :
    $('#piece').stop();
or :
    $('#piece').stop(true, true);

Test page : http://jsfiddle.net/HyPFd/
0
 
Pedro ChagasWebmasterAuthor Commented:
Hi, thanks for the answer. Just a clarification, in every situations will always use "stop"?
My doubt is about if have lots of "divs" in animation in simultaneous, I have to do "stop" for all. Maybe have another solution for stop all.
Can you give me a clarification?

~JC
0
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

 
leakim971PluritechnicianCommented:
use the same class for all your div your want to stop so instead using an ID :

$("#ID_OF_THE_DIV").stop();

use :

$(".CLASS_OF_THE_DIVS").stop();

bad design but work too :

$("#ID_OF_THE_DIV1,#ID_OF_THE_DIV3,#ID_OF_THE_DIV2").stop();
0
 
Pedro ChagasWebmasterAuthor Commented:
Hi @leakim971 I did some change to my code, based in your last post:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Untitled Document</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<style type="text/css">
#geral{position: absolute; width: 600px; height: 600px;}
#piece{position: absolute; width: 13px; height: 20px; left: 20px; top: 150px;}

/* the new element (for show after the first stage):*/
#square{position: absolute; width: 20px; height: 20px; background-color: red; display:none; left: 500px; top: 500px;}
</style>
</head> 
<body> 
<div id="geral">
<div id="piece"><a class="anim"><img src="ponteiro_rato.png" alt="Rato" width="13" height="20" /></a></div>
<div id="square"><a class="anim"></a></div>
<div id="stop">stop demonstration</div>
</div>
<script>
demo();
function demo(){
$('#piece').animate({ left: '500', top: '500' }, 2500, function(){
      $('#square').show();
      var t = setTimeout(function(){
            $('#square').hide();
            $('#piece').animate({ left: '150', top: '100' }, 2500);
      },5000);
});
}

$("#stop").click(function(){
    $("#piece").stop();
});
</script> 
</body> 
</html>
</body> 
</html>

Open in new window

I associate the class "anim" to the divs #square and #peace.
The code in snippet code works well, but when I change the line 34 for "$(".anim").stop();" don't work. It was supposed to stop all elements with the class "anim"?

~JC
0
 
Pedro ChagasWebmasterAuthor Commented:
Ok, I forget the class one.
You give me this solution, not yet tested ($("#ID_OF_THE_DIV1,#ID_OF_THE_DIV3,#ID_OF_THE_DIV2"), and I wonder:
Is possible do something like in that line:
$("#div*"); where the * is a div1 to div9?

~JC
0
 
leakim971PluritechnicianCommented:
wait, you have simpler, just use :
$("#stop").click(function(){
    $.fx.off = true;
});

Open in new window

0
 
Pedro ChagasWebmasterAuthor Commented:
Don't work, but sounds good.
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Untitled Document</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<style type="text/css">
#geral{position: absolute; width: 600px; height: 600px;}
#piece{position: absolute; width: 13px; height: 20px; left: 20px; top: 150px;}

/* the new element (for show after the first stage):*/
#square{position: absolute; width: 20px; height: 20px; background-color: red; display:none; left: 500px; top: 500px;}
</style>
</head> 
<body> 
<div id="geral">
<div id="piece"><a class="anim"><img src="ponteiro_rato.png" alt="Rato" width="13" height="20" /></a></div>
<div id="square"><a class="anim"></a></div>
<div id="stop">stop demonstration</div>
</div>
<script>
demo();
function demo(){
$('#piece').animate({ left: '500', top: '500' }, 2500, function(){
      $('#square').show();
      var t = setTimeout(function(){
            $('#square').hide();
            $('#piece').animate({ left: '150', top: '100' }, 2500);
      },5000);
});
}


$("#stop").click(function(){
    $.fx.off = true;
});

</script> 
</body> 
</html>
</body> 
</html>

Open in new window


~JC
0
 
leakim971PluritechnicianCommented:
oh yes, it's to disable or not animation, this is not what you want
so use the previous one : $("#ID_OF_THE_DIV1,#ID_OF_THE_DIV3,#ID_OF_THE_DIV2")
if you want to follow your id $("#div*"); here the good syntax : $("[id^=div]").stop();
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.