Подтвердить что ты не робот

Эффект Fadein() для функции: как?

У меня есть эта функция, которая хорошо работает для ленивой загрузки.

panel.find('img[data-src]').each(function(){
            element = $(this);
            element.attr('src', element.data('src'));
            element.removeAttr('data-src');

Как я могу дать эффект fadeIn() для этой функции removeAttr?
Я пробовал:

element.removeAttr('data-src').fadeIn();

но это не сработает. Код img выглядит так, и я просто хочу, чтобы dot.png fadeOut и original.jpg исчезли.

<img src="dot.png" data-src="original.jpg">

http://jsfiddle.net/7s1yb1un/6/
Спасибо заранее

4b9b3361

Ответ 1

Вы не можете вытеснить изменение src на элементе img. Чтобы добиться этого, вам понадобятся два элемента img. Второй будет иметь src "original.jpg" и будет иметь более высокий z-index и начать с display: none для стиля. Затем вы можете угаснуть его, и он будет исчезать над точкой.

EDIT Учитывая ваш новый вопрос, вы можете сделать следующее:

  • Добавить onload прослушиватель для изображения
  • Перед изменением "src", исчезните изображение
  • Затем измените "src" на "original.jpg"
  • В вашей функции onload сделайте fadeIn

Ответ 2

Вот что я сделал.

Добавлен fadeOut(5000), img с оригинальным src будет исчезать после 5 sec. Вызывается функция с таймаутом 6sec, которая меняет src на data-src и fadeIn(5000) через 5 секунд, я надеюсь, что это решит вашу проблему.

Код JS ниже

var myVar;
function myFunction() {
    myVar = setTimeout(function(){ 
        var src = $("img.hide").attr("data-src");
        $("img.hide").attr("src",src);
        $("img.hide").fadeIn(5000); 
    }, 6000);
}

function myStopFunction() {
    clearTimeout(myVar);
}

$(document).ready(function() {
  $(".hide").fadeOut(5000);
  myFunction();  
});

Ответ 3

Следующий код будет исчезать, измените src, затем затухайте.

JSFiddle

HTML

<div id="fullpage">
  <div class="section">
    <img class="fadeable" src="http://1.gravatar.com/avatar/767fc9c115a1b989744c755db47feb60?size=800" data-src="http://2.gravatar.com/userimage/5/ff5263e8c30557b57e64423ee8496e41?size=800" width=100 height=100 alt="smile"></div>
</div>

JS

$(function() {
  $('img[data-src]').each(function(i, e) {
    // cache element
    original_img = $(e);
    original_img
    .fadeOut(function(){
      original_img.attr('src', original_img.attr('data-src'))    
    })
    .fadeIn();
  })
});

Ответ 4

Спасибо, ребята. Я нашел этот script рабочий (каким-то образом), изображения иногда мигают. Я не знаю, семантически корректно.

$(function() {
$('img').one("load", function() {
var e = $(this);
e.data('src', e.attr('data-src'));
e.animate({"opacity": 0}, 400);
e.data('src');
e.animate({"opacity": 1}, 400);
})
});

Ответ 5

Следующий код будет клонировать изображения с атрибутом data-src, затем скрыть клон, обновить клон src, поместить его поверх исходного изображения и затухать. Будет ли это работать для вас?

JSFiddle

HTML

<div id="fullpage">
  <div class="section">
    <img class="fadeable" src="http://1.gravatar.com/avatar/767fc9c115a1b989744c755db47feb60?size=800" data-src="http://2.gravatar.com/userimage/5/ff5263e8c30557b57e64423ee8496e41?size=800" width=100 height=100 alt="smile"></div>
</div>

JS

$(function() {
  $('img[data-src]').each(function(i, e) {
    // cache element
    original_img = $(e);
    // get position of original image
    offset_left = original_img.offset().left;
    offset_top = original_img.offset().top;
    // get data-src of
    data_src = original_img.attr('data-src');
    // clone original image
    original_img.clone()
    .hide()
    // put it directly in the body, so it can be positioned
    .appendTo('body')
    // set the new src
    .attr('src', data_src)
    // place it over the original image
    .css({
        "left": offset_left,
      "top": offset_top,
      "position": "absolute"
    })
    .fadeIn(function(){
        original_img.attr('src', data_src);
        $(this).remove();
    });
  })
});