jQuery затухание двух изображений без белого
Я хотел бы выцветать изображения без белого перехода между ними.
HTML:
<div class="image">
<span><img src="1.jpg"></span>
</div>
JQuery:
$('.image > span > img').fadeOut(1000, function() {
$('.image > span > img').attr('src', images[i]);
$(this).fadeIn(1000);
});
Это работает, но между сменой цвета исчезает белый цвет. Массив изображений содержит источники изображений. Я нашел этот http://jsfiddle.net/byB6L/ но я не могу обновить свой код для работы с этим.
4 ответа
Это потому, что вы используете одно и то же изображение в конце обратного вызова анимации.
Мое предложение: использовать position: relative;
на class="image"
контейнер, поместите элемент изображения как position:absolute;
Теперь, после того как изображение исчезло, вставьте новое изображение в контейнер, затемните его и удалите первое изображение.
Пример:
Html:
<div class="image">
<span><img src="1.jpg"></span>
</div>
Css:
<style type="text/css">
.image{position:relative;}
.image span img{position:absolute;top:0;left:0;}
</style>
JavaScript:
<script type="text/javascript">
$('.image > span > img').fadeOut(1000);
var $image = $('<img alt="" src="YOUR NEW IMAGE_PATH" style="opacity:0;" />');
$('.image > span').append($image);
$image.fadeIn(1000, function(){
$('.image > span > img').first().remove();
});
</script>
Это должно дать вам представление:
var c = 0, // Counter index
$img = $('.image img'), // Get images
n = $img.length; // How many images?
$img.eq(c).show(); // Show c one
(function loop() { // Recursive infinite loop
$img.delay(1000).fadeOut(800).eq(++c%n).fadeIn(800, loop);
}());
.image{
position:relative;
}
.image img{
position:absolute;
top:0px;
display:none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="image">
<img src="http://placehold.it/300x150/bf0?text=Apples" alt="" />
<img src="http://placehold.it/300x150/0bf?text=and" alt="" />
<img src="http://placehold.it/300x150/fb0?text=Pears" alt="" />
</div>
Вместо того, чтобы затемнять одно изображение, а затем исчезать в другом, используйте два элемента изображения и накладывайте их друг на друга, а затем просто затемните верхнее, чтобы вместо него появилось нижнее.
CSS:
.image img { position: absolute; left: 0; top: 0; }
HTML:
<div class="image">
<img class="bottomImage" src="http://placekitten.com/100/100"/>
<img class="topImage" src="http://placekitten.com/g/100/100"/>
</div>
Javascript:
$('.topImage').fadeOut(3000);
JQuery не поддерживает анимацию фонового изображения, такую как анимация цвета фона (что также необходимо использовать дополнительный плагин). Поэтому, чтобы сделать вашу анимацию, вам обязательно нужно иметь два изображения.