2016-12-10 3 views
0

Я ищу рабочий пример ленивой загрузки изображений внутри данных, которые продолжают работать после нажатия на заголовок столбца, чтобы изменить сортировку.Рабочий пример данных с ленивой загрузкой изображений

метод я имел наибольший успех использует jquery.lazyload штепсель:

<script src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazyload/1.9.1/jquery.lazyload.min.js"></script> 
<script type="text/javascript"> 
    $(function() { 
    $("img.lazy").lazyload(); 
    }); 
</script> 

Вот как я ссылку на изображение:

<img class="lazy" data-original="https://example.com/image.jpg" width="50" height="50" /> 

Ленивая загрузка работает нормально, если я никогда измените сортировку. Однако, если я решил изменить сортировку таблицы, нажав на один из заголовков столбцов, ленивая загрузка перестает работать, и любые изображения, которые не были загружены в этот момент, остаются пустыми, когда я просматриваю их в представлении.

У меня не было эксперта по javascript или jQuery, поэтому пришлось учиться на примерах здесь, в SO и в других местах. Но эта проблема претит меня. Из моих исследований я вижу много комментариев и фрагментов о том, как это возможно, но фактический рабочий пример, подтверждающий это, не поддерживается.

jquery-lazyload images in jquery-databables

https://datatables.net/forums/discussion/1959/image-thumbs-in-table-column-lazy-loading

Я не буду отбарабанить другие многочисленные ссылки, которые я нашел здесь и в других местах, я просто нужна добрая душа, чтобы помочь.

+0

Если сортировка осуществляется на стороне клиента, библиотека может сначала извлекать данные, а затем прибегать к сортировке. – randominstanceOfLivingThing

ответ

3

Используйте параметр drawCallback, чтобы определить функцию, которая будет вызываться каждый раз, когда DataTables выполняет ничью.

Например:

$('.table-data').DataTable({ 
    drawCallback: function(){ 
     $("img.lazy").lazyload(); 
    } 
}); 

См this jsFiddle для кода и демонстрации.

+0

Спасибо @ Gyrocode.com, я смог заставить его работать после просмотра исходного кода вашего jsFiddle. Ура! –

0

Я как бы застрял в этом вопросе, поскольку у меня нет доступа к вашему бэкенду или дополнительной информации о ваших обстоятельствах, но я думаю, что будет работать, чтобы назвать ваш ленивый код загрузки в событии ничьей, как это :

$(document).ready(function() { 
    $("img.lazy").lazyload(); 
    $('.table-data').DataTable({ 
     "drawCallback": function(){ 
      $("img.lazy").lazyload(); 
      setTimeout(function(){ 
       $(window).trigger("scroll") 
      }, 1000); 
     } 
    }); 
}); 

у меня есть пример до here, но я думаю, что вы могли бы использовать обработку на стороне сервера?

+1

Спасибо, что посмотрели на эту @annoyingmouse. Я протестировал ваш jsfiddle и обнаружил, что инструмент проверки Chrome открыт, он, как представляется, извлекает все изображения, прежде чем они появятся, т. Е. Неправильно выполняет ленивую загрузку. Я мог ошибаться, хотя я новичок в использовании инструмента для разработчиков Chrome! Да, выполняя обработку на стороне сервера. Бэкэнд подготавливает HTML-файл, похожий на то, что вы создали, только разница заключается в том, что он использует ** data-original ** вместо ** src ** и имеет атрибуты width/height. Я переключил это, чтобы воспроизвести ваш пример, но вместо ленивой загрузки загружаются все изображения. –

+0

Извините. Я исправил его так, чтобы событие прокрутки запускалось после события ничьей. – annoyingmouse

+0

Я проверил ответ от @ Gyrocode.com, и это правильно. В конце концов, setTimeout не требуется! Ahh well - по крайней мере, у вас есть рабочий пример! :-) – annoyingmouse

Смежные вопросы