-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

よろしくお願いします!他の誰かがこのスレッドを見つけた場合のコードは次のとおりです。以下のコードは、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 に答える
0

mouseenterandイベントをリッスンし、mouseleave間隔を停止して再開する必要があります。

次のようなコードが少しあると仮定します

<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 に答える