【问题标题】:Need to make this JQuery image slider pause on mouseover需要让这个 JQuery 图像滑块在鼠标悬停时暂停
【发布时间】:2013-01-14 22:01:02
【问题描述】:

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

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

【问题讨论】:

  • 这不是:pleasemakemyscript.com 你试过什么?
  • 大声笑我知道对不起,我对 JQuery 很陌生,这是一个学校项目。通过添加一个布尔值来使图像停止,我可以很好地暂停图像。然后我尝试再次启动相同的功能,但它甚至知道我调用了相同的功能 $('img').mouseout(function(event) { foo = true; setInterval('rotate()',myInterval) ; });
  • 看看使用stop()api.jquery.com/stop

标签: jquery mouseover


【解决方案1】:

您应该收听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

【讨论】:

  • intervalPlay = setInterval(rotate,6000);更好。对 mouseenter/mouseleave 使用别名 hover() 仍然更好。顺便说一句,您两次使用 mouseenter 处理程序,一次应该是 mouseleave
【解决方案2】:

感谢大家的帮助!这是其他人找到此线程的代码。下面的代码暂停 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    相关资源
    最近更新 更多