为什么我的jquery幻灯片代码不起作用?

时间:2010-03-19 15:43:40

标签: jquery slideshow z-index

我有三张图片,显示和样式如下:

<img id="img1" src="images/category_slideshow/yellow-viper-on-car-ramps.jpg" alt="Yellow Viper on Race Ramps Car Ramps" width="557" height="415" /> 
        <img class="onBottom" src="" width="557" height="415" />  
        <img class="onTop" src="" width="557" height="415" /> 

.onBottom{
  position:absolute;
  margin-top:-415px;
  background:url(../images/category_slideshow/loading.gif) center no-repeat;
}

.onTop{
  position:absolute;
  margin-top:-415px;
  background:url(../images/category_slideshow/loading.gif) center no-repeat;
}

这是我的Javascript:

  $(document).ready(function() {

    var productImages = new Array();
    productImages["raceramps56"] = "images/category_slideshow/black-350z-on-car-ramps.jpg";
    productImages["raceramps67"] = "images/category_slideshow/red-corvette-on-car-ramps.jpg";
    productImages["xtenders"] = "images/category_slideshow/silver-sti-on-xtenders.jpg";
    productImages["sportramps"] = "images/category_slideshow/black-corvete-on-car-ramps.jpg";
    productImages["rollups"] = "images/category_slideshow/yellow-lotus-on-rollups-for-car-ramps.jpg";


    $(".onTop, .onBottom").css("opacity", "0");   //Give the two images 0 opacity

    $( '.leftMenuProductButton' ).hover ( 
      function () {                         
        //.leftMenuProductButton is a button in a menu.
        // There are several of these buttons, each button
        // has an ID such as "raceramps56" or "xtenders"

        var swapIMG = $(this).attr("id");  //This gets the ID, such as "raceramps56" or "xtenders"

        $(".onTop").css({opacity: '0', 'z-index': '3'})
          .attr("src", productImages[swapIMG])
          .load(function() {
            //This takes the first IMG, make it invsisbile,
            // brings it to the top, replaces it's SRC image
            // with the variable, then once it is loaded, it fades in.
             $(this).fadeTo(300, 1);
          })
          .removeClass("onTop")
          .addClass("replaceMe"); // This removes the class "onTop and replaces it with "replaceMe". I can't simply change onTop to onBottom yet, as I need to reference onBottom later.

         $(".onBottom").addClass("onTop").removeClass("onBottom").css({'z-index': '1'});  // This converts onTop to onBottom, and puts it at the bottom. 

         $(".replaceMe").removeClass("replaceMe").addClass("onBottom"); //Now that I no longer have an onBottom, I can replace replaceMe with onBottom

      },
      function () {
        //does nothing right now

      });
   });

这段代码运行得很好。但是,如果我鼠标悬停.leftMenuProductButton,然后移动到另一个.leftMenuProductButton,然后在两者之间来回移动,它表现不正常。

您可以在www.raceramps.com/v3上查看示例。

1 个答案:

答案 0 :(得分:1)

好吧,我会改变两件事,首先尝试改变

$(".onTop").css({opacity: '0', 'z-index': '3'}).attr("src",productImages[swapIMG]).load(function() {
             $(this).fadeTo(300, 1, function(){
    $(this).removeClass("onTop").addClass("replaceMe");
});

}); 

这样它就不会删除该类,直到完全消失。如果你链接.removeClass就像你所做的那样,它将在LOAD完成后立即被触发而不是淡入淡出。

第二,我会在开始新动画之前停止所有动画尝试添加

$(".onTop").stop();

在悬停功能之上