5

我无法弄清楚如何让一个简单的淡入淡出循环工作。我对 jQuery 很陌生,你可能会说。我已经尝试过了,但现在锻炼时间太长了,所以我想我会寻求帮助。

我想做的事:

我有两个图像,ID 的#img1 和#img2。我希望图像 1 淡入然后等待让我们说 6 秒然后淡出。我已经尝试过 .wait 功能,但它只是停止了我的工作。我设法让第一张图像淡入然后淡出,但中间没有等待。然后我想在图像 1 淡出时开始淡入图像 2,然后图像 2 等待然后淡出,而图像 1 再次淡入并永远循环!希望这是有道理的。

 $(document).ready(function(){
  $('#img1').hide()
.load(function () {
  $(this).fadeIn(4500)
  .fadeOut(4500);
  $('#img2').hide().wait(9000)
  .load(function () {
  $(this).fadeIn(4500)
  .fadeOut(4500);
});

干杯,它让我发疯。Ps您可以尝试对您的答案进行一些解释。谢谢

4

6 回答 6

10

这是一个四张图片循环幻灯片,它没有使用 setTimeout 函数,而是使用了 delay 函数。

<script>
  function startSlideshow(){
    $("div.text_b1").fadeIn(1000).delay(10500).fadeOut(1500); //13000
    $("div.text_b2").delay(13000).fadeIn(1500).delay(11000).fadeOut(1500); //27000
    $("div.text_b3").delay(27000).fadeIn(1500).delay(11000).fadeOut(1500); //41000
    $("div.text_b4").delay(41000).fadeIn(1500).delay(11000).fadeOut(1500, startSlideshow); //55000
  }

  $(document).ready(function(){
    startSlideshow();
  });
</script>

看看它在行动http://www.erestaurantwebsites.com/

于 2011-09-24T04:08:25.100 回答
6

你为什么不使用像Cycle 插件这样的解决方案?

它有比你想做的更多的选择。

如果您确实需要自己执行此操作,可以查看插件的源代码。我没有这样做,但我认为编码器使用了animate函数(来自 jQuery)和 setTimeout 函数(来自纯 javascript)的组合。使用这些函数,他必须做一些事情,比如启用一个计时器一段时间,当时间完成时,他执行动画函数,将图像的不透明度设置为 0(用于图像隐藏)和 1(用于显示图像)。

于 2009-09-06T18:48:03.280 回答
4

两年后编辑:有更好的方法可以做到这一点......所以忽略这个答案。


我会尝试结合使用回调和 setTimeout。(我要以 Kobi 的回复为基础,因为他是在我打字的时候发帖的。)

在 CSS 中,给两个图像一个“display: none;” 而不是在 jQuery 的开头将它们设置为隐藏。然后在 jQuery 中:

function imageOneFade(){
  $('#img1').fadeIn(2000, function(){ setTimeout("$('#img1').fadeOut(2000); imageTwoFade();",6000); });
}

function imageTwoFade(){
  $('#img2').fadeIn(2000, function(){ setTimeout("$('#img2').fadeOut(2000); imageOneFade();",6000); });
}

$(document).ready(function(){
   imageOneFade();
});

希望你能工作。

setTimeout 函数有两个参数。

setTimeout(WHAT WILL HAPPEN, HOW LONG TO WAIT)

fadeIn/Out 函数可以有第二个参数,当效果完成时触发。

于 2009-09-06T19:39:08.077 回答
1

您可以使用 jQuery 的回调和 JavaScript 的组合setTimeout
setTimeout 用于延迟,并且在动画完成后使用回调(虽然还有许多其他回调)。

function startSlideshow(){
  $('#p1').fadeOut(2000, function(){
    setTimeout(function(){
      $('#p1').fadeIn(2000, startSlideshow)
    },1000);
  });
}

$(document).ready(function(){
   startSlideshow();
});

在行动中看到它:http: //jsbin.com/ulugo

于 2009-09-06T19:26:33.733 回答
0

基于延迟()函数,如果需要更大数量的图像循环,这里是图像数量的解决方案。这给出了 B->A 交叉淡入淡出效果(或删除+fadems/2以获得简单的淡入淡出效果)。心灵 - 图像必须到位:绝对!重要;(参见 html 示例)。

jQuery:

function startSlideshow(){

    var dms = 2500; // image show duration in ms
    var fadems = 750; // crossfade in ms
    var imgnum = 5; // total number of images
    var nms = 0;

    // fadeInOut first image
    $("#img1").fadeIn(fadems).delay(dms).fadeOut(fadems);  
    nms = nms + fadems*2 + dms- fadems/2;   

    // fadeInOut rest images
    for (var i = 2; i<imgnum; i++){
        // remove +fadems/2 for fadeOut effect, instead of crossfade
        $("#img"+i).delay(nms).fadeIn(fadems).delay(dms).fadeOut(fadems+fadems/2); 
        nms = nms + fadems*2 + dms - fadems/2;  
    }
    // fadeInOut last image and start over
        $("#img"+imgnum).delay(nms).fadeIn(fadems).delay(dms).fadeOut(fadems, startSlideshow);
}

startSlideshow();

HTML:注意:下一个图像 id 由 ++ 上升:#img1、#img2、#img3....#img128 等。

<style>
    .crossfade {
        /* image width and height */
        width: 160px;
        height: 120px;
        display: none; 
        position: absolute !important;

    }
</style>

<div class="place_your_images_container_where_is_needed">

    <div id="img1" class = "crossfade" >
        <img src="imageOne.png" />
    </div>

    <div id="img2" class = "crossfade" >
        <img src="image2.png" />
    </div>

    <div id="img3" class = "crossfade" >
        <img src="image3.png" />
    </div>

    <div id="img4" class = "crossfade" >
        <img src="imageFour.png" />
    </div>

    <div id="img5" class = "crossfade" >
        <img src="imageLast.png" />
    </div>

</div>

ps 使用透明PNG图像以获得更好的效果。

于 2015-01-27T15:28:49.300 回答
0

这就是我使用简单 jQuery 的方式。请参阅工作片段。

loopStart();

function loopStart() {
  $("#image1").delay(2000).fadeOut("slow", function() {
    loopTwo();
  });
};

function loopOne() {
  $("#image1").fadeIn("slow", function() {
    $("#image1").delay(2000).fadeOut("slow", function() {
      loopTwo();
    });
  });
};

function loopTwo() {
  $("#image2").fadeIn("slow", function() {
    $("#image2").delay(2000).fadeOut("slow", function() {
      loopOne();
    });
  });
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<img id="image1" src="http://lorempixel.com/city/200/200">
<img id="image2" style="display:none;" src="http://lorempixel.com/people/200/200">

于 2016-09-03T20:58:10.183 回答