javascript - jQuery - 使用 fadeOut 而不破坏元素

标签 javascript jquery image

所以我用 jQuery 制作了一个简单的“图库” View 。简而言之,我有一个在页面加载时从中间开始的图像,5 秒后,该图像转到左侧并淡出,而新图像转到右侧以在淡入时替换上一个图像。一旦上一个图像淡出后,它会放回到图像堆栈中。如果当前未使用该图像,我将不透明度设置为 0,使其不可见。当需要再次显示图像时,我将不透明度设置为 1,当然,将其淡入并将其设置为动画到正确的位置。我已经实现了其中的大部分内容,并使其发挥作用。但我遇到了一个问题。一旦我淡出图像,它就消失了。我不知道该元素是否已被破坏,或者它是否只是完全透明,但它已经消失了。我稍后需要重新使用该图像,所以这当然是一个问题。我已经看到其他网站做了我正在尝试的事情,所以这是可能的。

有没有办法淡出一个元素,然后再淡入淡出以供重复使用?

jQuery:

$(document).ready(function(){
     var images = $('ul.images li');
     var lastElem = images.length-1;
     var target;
     var hasMoved = false;

     images.first().addClass('selected');

     function slide(target) {
        //alert(hasMoved);
          for(var i = 0; i < images.length; i++) {
             if(target != 0) { 
                if(i != target && i != target-1) {
                    $(images[i]).css('opacity', '0');  
                } else {
                    $(images[i]).css('opacity', '1');
                }
             } else {
                 if(i != target && i != lastElem) {
                    $(images[i]).css('opacity', '0');  
                } else {
                    $(images[i]).css('opacity', '1'); 
                }
             }
          }

         $(images[target]).fadeIn({queue: false, duration: 2000});
         $(images[target]).animate({right:'300px'}, 2000);
           images.removeClass('selected').eq(target).addClass('selected');

         if(target != 0) {
             $(images[target--]).fadeOut({queue: false, duration: 2000});
             $(images[target--]).animate({left:'300px'}, 2000);
         } else {
             $(images[lastElem]).fadeOut({queue: false, duration: 2000});
             $(images[lastElem]).animate({left:'300px'}, 2000);
         }

         hasMoved = true;

     }

     function sliderTiming() {
       target = $('ul.images li.selected').index();
       target === lastElem ? target = 0 : target = target+1;
       slide(target);
     };

     if(hasMoved === false) {
         for(var i = 0; i < images.length; i++) {
              if(i === 0) {
                $(images[0]).css('opacity', '1');  
              } else {
                  $(images[i]).css('opacity', '0'); 
              }
          }
     }

    var timingRun = setInterval(function() { sliderTiming(); },5000);
    function resetTiming() {
        clearInterval(timingRun);
        timingRun = setInterval(function() { sliderTiming(); },5000);
    };
});

最佳答案

fadeOut 不会删除元素,但 fadeOut 会将 display 设置为 none 来删除元素一旦淡出,就会从流程中消失。

如果需要保持元素在流程中但不可见,可以使用fadeTo()

$(images[target--]).fadeTo(2000, 0)

animate(),因为您已经在使用它

$(images[target--]).animate({left:'300px', opacity: 0}, 2000);

关于javascript - jQuery - 使用 fadeOut 而不破坏元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24090389/

相关文章:

javascript - 在 Angular2 上使用正则表达式制作管道

python - 使用 PIL 调整图像大小并保持方向

java - 如何使用 LWJGL 加载图像

Javascript : DataTables.net,用延迟加载替换分页

Javascript YouTube API - 加载播放器

javascript - 如何获取光标下的文字?

javascript - 未调用 onclick 函数

Python、Cv2、numpy 来指示图片/图像中的区域

javascript - 内联 Javascript 会减少延迟的可能性吗?

javascript - 从JS发送参数到asp.net