需要在鼠标悬停时暂停此JQuery图像滑块

时间:2013-01-14 22:01:02

标签: jquery mouseover

我希望幻灯片放映在鼠标悬停时暂停,然后当用户将鼠标从图像上移开时再次开始播放。我提出了临时搭建方式,但是如果你过快地将图像上下移开,就会导致图像的时间发生变化。

function theRotator() {
//Set the opacity of all images to 0
$('div.rotator ul li').css({opacity: 0.0});

//Get the first image and display it (gets set to full opacity)
$('div.rotator ul li:first').css({opacity: 1.0});

//Call the rotator function to run the slideshow, 6000 = change to next image after 6 seconds

setInterval('rotate()',6000);
}
function rotate() { 
//Get the first image
var current = ($('div.rotator ul li.show')?  $('div.rotator ul li.show') : $('div.rotator ul li:first'));

if ( current.length == 0 ) current = $('div.rotator ul li:first');

//Get next image, when it reaches the end, rotate it back to the first image
var next = ((current.next().length) ? ((current.next().hasClass('show')) ? $('div.rotator ul li:first') :current.next()) : $('div.rotator ul li:first'));

//Set the fade in effect for the next image, the show class has higher z-index
next.css({opacity: 0.0})
.addClass('show')
.animate({opacity: 1.0}, 1000);

//Hide the current image
current.animate({opacity: 0.0}, 1000)
.removeClass('show');

};


$(document).ready(function() {      
//Load the slideshow
theRotator();
$('div.rotator').fadeIn(1000);
$('div.rotator ul li').fadeIn(1000); // tweek for IE
});

2 个答案:

答案 0 :(得分:0)

您应该收听mouseentermouseleave事件,并停止并重新启动您的间隔。

假设您有一些像

这样的代码
<script>
    // Declare the var that will keep reference of the setInterval
    intervalPlay = false;
</script>

<div id="yourSliderContainer">
    // your slide content
</div>

当鼠标进入div

时,你应该停止setInterval
$("#yourSliderContainer").mouseenter(function(mouseEvent) {

    // Stop the setInterval if existing
    if (intervalPlay != false)
    {
        clearInterval(intervalPlay);
        intervalPlay = false;
    }
});

$("#yourSliderContainer").mouseleave(function(mouseEvent) {

    // Restart the setInterval
    if (intervalPlay == false)
        intervalPlay = setInterval('rotate()',6000);
});

注意:幻灯片的播放时间可能因为你没有停止setInterval而重新创建,所以在一段时间后你会有很多间隔运行。

请点击此处了解详情:clearInterval

答案 1 :(得分:0)

谢谢大家的帮助!以下是其他人找到此主题的代码。下面的代码暂停了mouseenter上的滑块,并且在mouseleave上没有任何问题就停止了(这里是我在编辑它之前获取代码的站点,用于启动和停止) http://www.alohatechsupport.net/webdesignmaui/maui-web-site-design/easy_jquery_auto_image_rotator.html

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery        /1.3.2    /jquery.min.js"></script>
<script type="text/javascript">
var myInterval = 5000;
var intervalPlay = true;


$('div.rotator').mouseenter(function(mouseEvent) {
// Stop the setInterval if existing

if (intervalPlay != false)
{
    clearInterval(myInterval);
    //$(".show").stop();
    intervalPlay = false;
}
});

$("div.rotator").mouseleave(function(mouseEvent) {
// Restart the setInterval
if (intervalPlay == false)
    intervalPlay = true;
});

function theRotator() {
//Set the opacity of all images to 0
$('div.rotator ul li').css({opacity: 0.0});

//Get the first image and display it (gets set to full opacity)
$('div.rotator ul li:first').css({opacity: 1.0});

//Call the rotator function to run the slideshow, 10000 = change to next image      after 6 seconds

setInterval('rotate()',myInterval); 
    }

    function rotate() {
if (intervalPlay == true){
//Get the first image
var current = ($('div.rotator ul li.show')?  $('div.rotator ul li.show') :        $('div.rotator ul li:first'));

    if ( current.length == 0 ) current = $('div.rotator ul li:first');

//Get next image, when it reaches the end, rotate it back to the first image


    console.log(intervalPlay);
   console.log(myInterval);
 var next = ((current.next().length) ? ((current.next().hasClass('show')) ?      $('div.rotator ul li:first') :current.next()) : $('div.rotator ul li:first'));

//Set the fade in effect for the next image, the show class has higher z-index
next.css({opacity: 0.0})
.addClass('show')
.animate({opacity: 1.0}, 1000);

//Hide the current image
current.animate({opacity: 0.0}, 1000)
.removeClass('show');

}
 };

 $(document).ready(function() {     
//Load the slideshow
 theRotator();
$('div.rotator').fadeIn(1000);
$('div.rotator ul li').fadeIn(1000); // tweek for IE
});

</script>