通过平滑过渡更改图像src

时间:2018-06-07 15:15:49

标签: javascript jquery html dom

我正在尝试使用一系列其他图像更改现有图像的src。我有这个工作,但过渡是可怕的,根本不顺利。我想这是因为它在初始图像消失后而不是同时突然加载新图像。

有没有聪明的方法让这种转变完全顺利?

var images = new Array ('image1.jpg', 'image2.jpg', 'image3.jpg');
var index = 1;

function rotateImage()
{
  $('.Parallax-host').children(':first-child').find('.Index-page-image img').fadeTo(1000,0.30, function() 
{
$(this).attr('src', images[index]);

$(this).fadeTo(500,1, function() 
{
  if (index == images.length-1)
  {
    index = 0;
  }
  else
  {
    index++;
  }
});
});
} 

$(document).ready(function()
{
 setInterval (rotateImage, 5000);
});

我无法访问此处的标记,因此它只需要一个jquery解决方案。

1 个答案:

答案 0 :(得分:0)

这里有一些让你入门的东西。



const images = ["https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQQnY5_NI7cYhnEqnNWcyX29B6x71CmUp1Xs_uFCkIrWEzuBhXf","https://pbs.twimg.com/profile_images/562466745340817408/_nIu8KHX.jpeg","https://images.pexels.com/photos/20787/pexels-photo.jpg?auto=compress&cs=tinysrgb&h=350"];
let curImage = 0;
function rotateImage(){
  let next = document.createElement('img');
  next.onload = function(e){//wait for the image to load
    document.getElementById('img_container').insertBefore(next, document.querySelector("#img_container img"));//insert new image before the previous (for stacking order)
    $('#img_container img').eq(1).fadeOut(1500, function(){
      $(this).detach();//remove the faded out img
    });
  };
  next.src = images[curImage];
  curImage = (curImage + 1) % images.length;
}
setInterval(rotateImage, 5000);

#img_container{
  width:300px;
  height:300px;
  position:relative;
  overflow:hidden;
}
#img_container img{
  position:absolute;
  top:0;
  left:0;
  bottom:0;
  right:0;
  min-width:100%;
  min-height:100%;
  margin:auto;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='img_container'>
  <img src="https://images.pexels.com/photos/20787/pexels-photo.jpg?auto=compress&cs=tinysrgb&h=350" />
</div>
&#13;
&#13;
&#13;