CSS & ldquo; display: none & rdquo; не предотвращает загрузку изображений? [Дубликат]

Одна вещь, которую я заметил при попытке этого решения, состоит в том, что если у вас есть N / A в начале или в конце массива, ffill и bfill не совсем работают. Вам нужны оба.

In [224]: df = pd.DataFrame([None, 1, 2, 3, None, 4, 5, 6, None])

In [225]: df.ffill()
Out[225]:
     0
0  NaN
1  1.0
...
7  6.0
8  6.0

In [226]: df.bfill()
Out[226]:
     0
0  1.0
1  1.0
...
7  6.0
8  NaN

In [227]: df.bfill().ffill()
Out[227]:
     0
0  1.0
1  1.0
...
7  6.0
8  6.0
28
задан Pickels 3 November 2009 в 16:21
поделиться

10 ответов

Если вы отображаете HTML на странице, даже если он скрыт, он будет загружаться. Если вы хотите, чтобы изображения загружались только тогда, когда они нужны, вам придется динамически устанавливать источник (src) в теге изображения в javascript.

Изменить 1: сценарий, на который вы ссылались, просто проверяет чтобы увидеть, как далеко вы прокрутили страницу вниз, а затем определяет, какие изображения видны (или почти видимы), проверяя их верхнюю часть - см. расширения $ .belowthefold и $ .rightoffold.

Пример работает отлично, когда изображения имеют одинаковый размер, потому что их контейнеры также могут быть одного размера, и вы не будете получать какое-то нечетное поведение при изменении размера страницы, когда вы лените их загрузить. Если ваши высоты и ширина изображений отличаются, вы можете получить некоторые нечетные результаты. & nbsp;

Редактировать 2:

<script type="text/javascript" charset="utf-8">
    $(document).ready( function() { $("img").removeAttr("src"); } );
</script>

<img src="Chrysanthemum.jpg" />
<img src="Desert.jpg" />
<img src="Hydrangeas.jpg" />
<img src="Jellyfish.jpg" />
<img src="Koala.jpg" />
<img src="Lighthouse.jpg" />
<img src="Penguins.jpg" />
<img src="Tulips.jpg" />
19
ответ дан Aashish 21 August 2018 в 10:07
поделиться
  • 1
    Но разве они не должны предотвращать загрузку изображений для этого скрипта, чтобы быть полезными? Если я проверю с помощью firebug, я вижу только изображения GET, когда я просматриваю их местоположение. Должен ли быть механизм, чтобы в первую очередь остановить их от загрузки? – Pickels 3 November 2009 в 16:37
  • 2
    Извините, я потерял сайт оригинального вопроса. Похоже, ваш ответ здесь: $ (self) .removeAttr (& quot; srx & quot;); self.loaded = false; – Langdon 3 November 2009 в 17:45
  • 3
    $ (& Quot; IMG & Quot;) removeAttr (& Quot; & SRC Quot;) CSS ( 'Дисплей': 'ни')..; может быть лучше, так как некоторые браузеры (Firefox) будут показывать сломанные маленькие значки, если для элемента IMG нет атрибута SRC. – Wells 3 November 2009 в 18:50
  • 4
    В последних браузерах это больше не работает. например. хром 12 :( – ADmad 8 September 2012 в 15:54
  • 5
    @Langdon да, я знаю об этом методе. Дело в том, что на самом деле я пытаюсь написать сценарий greasemonkey, чтобы предотвратить загрузку определенных изображений для определенного сайта. Поэтому метод, предложенный Aaron, не будет работать для моих нужд, поскольку сгенерированный html не находится под моим контролем. Изменить: Чтобы уточнить, я не пытаюсь реализовать ленивую загрузку. Просто хотелось предотвратить загрузку изображения в целом, которое я не хочу видеть для стороннего сайта, используя скрипт greasemonkey :) – ADmad 11 September 2012 в 13:42

Храните URL-адреса в другом месте, затем задайте все URL-адреса изображений для некоторого фиктивного изображения (пустое, прозрачное, «загрузка данных ...», что угодно). Когда изображение должно быть отображено, используйте JS для установки атрибута src, и браузер заберет его.

12
ответ дан Aaron Digulla 21 August 2018 в 10:07
поделиться
  • 1
    Этот вопрос является хорошим решением. Но когда вам нужно сделать какой-то SEO на своем сайте, он не будет индексироваться должным образом без правильного изображения на src. – Eranda 27 January 2016 в 06:21
  • 2
    @Eranda Наведите указатель на другую страницу, которая подходит для роботов. – Aaron Digulla 27 January 2016 в 18:12

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

Этот небольшой фрагмент предотвратит загрузку imgs, встраиваний и iframe и будет вручную загружать их позже, когда это необходимо. Одно предостережение: объекты, загруженные слишком быстро для JQuery / JavaScript, чтобы их поймать, по-прежнему загружаются, и сценарий все же их удаляет. Поскольку это предназначено для уменьшения времени загрузки, это не должно быть проблемой.

Fiddle

loadObjects = function() {
  /* LOAD OBJECTS */
  $("img, embed, iframe").each(function() {
    var obj = $(this);

    obj.attr("src", obj.data("objsrc")).ready(function() {
      obj.fadeIn(1000, "linear").prev(".loading").fadeOut(750, "linear", function() {
        $(this).remove();
      });
    });
  });
}

$(document).ready(function() {
    /* *** PREVENT OBJECTS FROM LOADING *** */
    $("img, embed, iframe").each(function() {
        var obj = $(this);
        obj.data("objsrc", obj.attr("src"));
        obj.hide().attr("src", "").before("<span class=\"loading\"></span>");
    });
});
0
ответ дан bur 21 August 2018 в 10:07
поделиться

Я не рекомендую это решение по многим причинам (например, он разрушает вашу страницу, если у вас нет Javascript, экраны и т. д.), но это возможность ...

You может изменить тег IMG, чтобы он захватывал другой атрибут, например ALT (LONGDESC или TITLE):

Затем используйте Javascript для обновления атрибута SRC с использованием значения ALT как вам нужно.

Итак, это один из способов, а не хороший. Я считаю, что единственный реальный подход - динамически генерировать правильный тег IMG по мере необходимости через Javascript, а не публиковать его с помощью HTML (это тоже имеет последствия для браузеров, не относящихся к JS и т. Д.)

0
ответ дан donohoe 21 August 2018 в 10:07
поделиться

Ну с Prototype вы можете сделать что-то вроде этого, я думаю:

var unloaded = [];
$$('img.noload').each(function (image) {
    unloaded.push(image);
    image._src = image.src;
    image.src = '';
});

Чтобы загрузить все из них:

unloaded.each(function (image) {
    image.src = image._src;
});

Для загрузки первого:

function loadImage (image) {
    image.src = image._src;
}

loadImage(unloaded.shift());

Ну, надеюсь, у вас есть идея.

4
ответ дан Kaze no Koe 21 August 2018 в 10:07
поделиться

Просто не включайте тег img в исходный HTML, создавайте его на лету, используя DHTML по мере необходимости. Вы также можете поместить поддельный url в изображение в тег img и заменить его на реальный динамически.

На боковой ноте - в чем смысл. Все, что вы пытаетесь сделать здесь, - это создать еще один механизм кеширования над существующим. Оставьте кэширование в браузерах, они довольно хороши в этом

0
ответ дан mfeingold 21 August 2018 в 10:07
поделиться
  • 1
    Причина, по которой мне нужен этот механизм, - это то, что я делаю слайд-шоу. Поэтому, если есть 30 изображений, я не хочу загружать все 30, если пользователь только просматривает пару изображений. – Pickels 3 November 2009 в 16:15

Вы можете обернуть изображение в тег noscript:

<noscript>
<img src="foo.jpg"/>
<noscript>

Все браузеры с включенным JavaScript будут игнорировать тег изображения, чтобы изображение не загружалось.

23
ответ дан Sheldon 21 August 2018 в 10:07
поделиться
  • 1
    В ожидании тестирования для подтверждения, это может быть самым полезным ответом всех ... – Fabio Beltramini 17 September 2014 в 14:37
  • 2
    Он работает и не требует изменения HTML-кода самого элемента изображения. Голосование за это как лучший ответ. Одним из возможных решений является использование <script type="some/thing">, хотя <noscript> является лучшим вариантом, если вы хотите иметь резерв для noJS. – metalim 5 February 2016 в 10:10
  • 3
    Почти то, что мне нужно. $('<noscript><div><img src="fo2o.png"></div></noscript>').html() работает, но $('<noscript>').append('<div><img src="fo2o.png"></div></noscript>').html() не делает :-( – Joachim Breitner 29 December 2016 в 12:25
  • 4
    Как ни странно, $('<noscript>').append('<img>').find('img').attr('src','foo.png') также вызывает загрузку изображения. – Joachim Breitner 29 December 2016 в 12:40

Вы можете использовать приведенную ниже часть, чтобы заменить все теги изображений фиктивным файлом (например, прозрачным gif 1x1). URL-адрес хранится в массиве для последующей ссылки.

$(document).ready(function(){
    var images = new Array();
    $("img").each(function(i){
      images[i] =  this.src;
       this.src='blank.gif';
    });
});
1
ответ дан sv88 21 August 2018 в 10:07
поделиться
  • 1
    Это все равно будет загружать изображения. – Pickels 3 November 2009 в 16:23
  • 2
    Вы абсолютно правы, я только тестировал в Safari, извините :) – sv88 3 November 2009 в 16:55
  • 3
    Я просто тестировал его онлайн, и ваш ответ на самом деле правильный. Это работает так же, как удаление атрибута src. Причина, по которой она не работала локально, заключается в комментариях к моему вопросу. – Pickels 3 November 2009 в 18:31

Ответ на эту проблему очень легко с помощью insertAdjacentHTML (), который позволяет вам добавлять HTML, когда захотите, в этом случае при нажатии кнопки:

function LoadImages(){

 document.body.insertAdjacentHTML('afterEnd','<img src="one.jpg" alt="" height="100" width="100"> <img src="two.jpg" alt="" height="100" width="100">');

}

HTML ...

<button onclick="LoadImages();">Click to load images</button>
-1
ответ дан user4723924 21 August 2018 в 10:07
поделиться

В этой статье показаны некоторые тесты с использованием как css-фона, так и img-тегов в наборе стандартных браузеров.

В моем личном опыте PictureFill на Scott Jehl - лучшее решение, которое я когда-либо использовал для разрешения и размеров изображений для мобильных устройств.

1
ответ дан yahyazini 21 August 2018 в 10:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: