Stop Slider on Mouseout (Jquery)

Problem

I have a slider which starts sliding when I mouseover but I wanted to stop the slide on mouseout. Below is the code HTML, CSS and Jquery. Please help me out

         `<div id="slider">
           <ul>
            <li>SLIDE 1</li>
             <li style="background: #aaa;">SLIDE 2</li>
               <li>SLIDE 3</li>
             <li style="background: #aaa;">SLIDE 4</li>
                </ul>  
            </div>`


        jQuery(document).ready(function ($) {

        $('#slider').mouseover(function(){
         setInterval(function () {
       moveRight();
       }, 3000);
       });

       jQuery("#slider").mouseout(function(){
         $("#slider ul").stop().animate();
          });

         var slideCount = $('#slider ul li').length;
         var slideWidth = $('#slider ul li').width();
          var slideHeight = $('#slider ul li').height();
          var sliderUlWidth = slideCount * slideWidth;

            $('#slider').css({ width: slideWidth, height: slideHeight });

            $('#slider ul').css({ width: sliderUlWidth, marginLeft: - slideWidth });

            $('#slider ul li:last-child').prependTo('#slider ul');

            function moveLeft() {
           $('#slider ul').animate({
          left: + slideWidth
          }, 200, function () {
           $('#slider ul li:last-child').prependTo('#slider ul');
           $('#slider ul').css('left', '');
          });
          };

           function moveRight() {
            $('#slider ul').animate({
            left: - slideWidth
        }, 200, function () {
          $('#slider ul li:first-child').appendTo('#slider ul');
        $('#slider ul').css('left', '');
       });
       };


        });    



        <style>
       html { border-top: 5px solid #fff; background: #58DDAF; color: #2a2a2a; }
        html,
        body { margin: 0; padding: 0; font-family: 'Open Sans'; }
        h1 { color: #fff; text-align: center; font-weight: 300; }
        #slider { position: relative; overflow: hidden; margin: 20px auto 0 auto;                 
         border- radius: 4px; }
        #slider ul { position: relative; margin: 0; padding: 0; height: 200px; 
         list-style: none; }
       #slider ul li { position: relative; display: block; float: left; margin: 0; 
       padding: 0; width: 500px; height: 300px; background: #ccc; text-align: center; 
         line-height: 300px; }
       a.control_prev,
       a.control_next { position: absolute; top: 40%; z-index: 999; display: block; 
       padding: 4% 3%; width: auto; height: auto; background: #2a2a2a; color: #fff; 
        text-decoration: none; font-weight: 600; font-size: 18px; opacity: 0.8; 
        cursor: pointer; }
        a.control_prev:hover,
        a.control_next:hover { opacity: 1; -webkit-transition: all 0.2s ease; }
        a.control_prev { border-radius: 0 2px 2px 0; }
        a.control_next { right: 0; border-radius: 2px 0 0 2px; }
         .slider_option { position: relative; margin: 10px auto; width: 160px;
        font-size: 18px; }
        </style>

It will be great help to me :)

Thank you in advance

Problem courtesy of: Webdesigner15

Solution

To stop the animation, store the timer id of the interval and use it when calling clearInterval:

http://jsfiddle.net/sk84k/2/ (thanks to the_Seppi for posting the jsFiddle)

var timerId = 0;

$('#slider').mouseenter(function(){
    timerId = setInterval(function () {
        moveRight();
    }, 3000);
});

jQuery("#slider").mouseout(function(){
    clearInterval(timerId);
});

Note that I have also changed from mouseover to mouseenter.

Solution courtesy of: sina72

Discussion

There is currently no discussion for this recipe.

This recipe can be found in it's original form on Stack Over Flow.