-1

我希望幻灯片在鼠标悬停时暂停,然后在用户将鼠标从图像上移开时重新开始。我想出了临时的方法,但如果你在图像上鼠标打开和关闭的速度太快,它会导致图像的时间变得疯狂。

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
});
4

2 回答 2

0

您应该收听mouseenterandmouseleave事件,然后停止并重新开始您的间隔。

假设您有一些代码,例如

<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

于 2013-01-14T22:20:04.883 回答
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>
于 2013-01-15T17:16:42.010 回答