How to control animate function on button click?

Issue

I have two divs named “arrow” and “inner”. I am trying to control the animate slide function when the div is clicked but have been unfortunate. The issue is noticeable when clicking very fast on the “arrow” div after user stops clicking the div is still sliding. I set the animate function under a small delay but I still experience lag. Here is my example code:

     <script language="javascript" src="http://code.jquery.com/jquery-1.5.2.js"></script>
    <script language="javascript">
    $(document).ready(function() {
          var out = 0;
          $("#arrow").click(function(){
          if(out==0)
            {
              $("#inner").animate({marginRight: "0px"}, 500 );
              out=1;
            }
        else
           {
             $("#inner").delay(400).animate({marginRight: "-100px"}, 500 );
             out=0;
           }
        });
    });
    </script>

    <div style="background-color: rgb(204, 204, 204); height: 300px; width: 300px; overflow: hidden; position: relative;">
<div id="inner" style="height: 100px; width: 150px; background-color: rgb(0, 204, 102); float: right; margin-right:-150px;" >Form is here</div>

<div id="arrow" style="height: 100px; width: 50px; background-color: rgb(255, 0, 0); float: right; cursor: pointer; position: absolute; top: 0; right: 0;" >Arrow is here</div>


    </div>

Solution

Just change your code

$("#inner").animate({marginRight: "0px"}, 500 );

to

$("#inner").stop(true, true).animate({marginRight: "0px"}, 500 );

and

$("#inner").animate({marginRight: "-100px"}, 500 );

to

$("#inner").stop(true, true).animate({marginRight: "-100px"}, 500 );

Please see following Link for example : http://jsfiddle.net/UAYTw/1/

you can also use $(“#inner”).stop(true, false).animate() instead of $(“#inner”).stop(true, true).animate(). as per your choice.

Answered By – Rony SP

Answer Checked By – Terry (AngularFixing Volunteer)

Leave a Reply

Your email address will not be published.