Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 412
  • Last Modified:

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
0
Pedro Chagas
Asked:
Pedro Chagas
  • 5
  • 4
1 Solution
 
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
 
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
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
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
 
leakim971PluritechnicianCommented:
forget the class one, use : $("#ID_OF_THE_DIV1,#ID_OF_THE_DIV3,#ID_OF_THE_DIV2")
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

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 5
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now