#jquery #html #css
#jquery #HTML #css
Вопрос:
Я хочу сначала изменить img src, а затем выполнить другие. Что-то вроде этого-
$('#bgImage').attr('src','images/' bgImage, function() {
alert('inside');
});
как я это сделаю?
Комментарии:
1. Есть ли конкретная причина, по которой вы хотите сделать это при обратном вызове вместо предложенных решений?
2. ya. для больших изображений я хочу сначала загрузить его
Ответ №1:
Может быть, еще одна строка кода?
$('#bgImage').attr('src','images/' bgImage),
$('#searchPin').css("top",y "px");
$('#searchPin').css("left",x "px");
Если вы хотите дождаться загрузки изображения, вы, вероятно, ищете событие load
:
$('#bgImage').load(function() {
$('#searchPin').css("top",y "px");
$('#searchPin').css("left",x "px");
}).attr('src','images/' bgImage);
Обратите внимание, что load(...)
обработчик событий был создан до изменения src
атрибута с помощью attr
— на случай, если изображение было кэшировано.
Если вы делаете это более одного раза, вы, возможно, захотите также изучить unbind
.
Комментарии:
1. Я считаю, что вам следует привязать загрузку перед изменением src для случаев, когда адресат уже кэширован.
2. лучше всего использовать
bind
обработчик дляload
события перед изменениемsrc
атрибута. Это потому, что если изображение кэшировано, то оно будет загружено до того, как вы присоедините обработчик, и оно не будет вызвано.. Вы также должны связать два вызова с одним и тем же элементом или, что еще лучше, поскольку оба относятся кcss
методу, используйте параметр объекта, который принимает несколько вариантов для изменения.css({top:y 'px', left:x 'px'})
3. @Matt — Это хороший момент. Я соответствующим образом изменю ответ.
4. @Gaby aka G. Petrioli — Я согласен, но я собираюсь оставить
.css(...)
как есть, поскольку это не то, что конкретно было задано.
Ответ №2:
Когда вы измените источник изображения, оно будет загружено и вызовет событие onload, когда это будет сделано. Итак:
$('#bgImage').attr('src','images/' bgImage).load(function() {
$('#searchPin').css("top",y "px");
$('#searchPin').css("left",x "px");
});
Комментарии:
1. лучше всего использовать
bind
обработчик дляload
события перед изменениемsrc
атрибута. Это потому, что если изображение кэшировано, то оно будет загружено до того, как вы присоедините обработчик, и он не будет вызван.. Вы также должны связать два вызова с одним и тем же элементом или, что еще лучше, поскольку оба относятся кcss
методу, используйте параметр объекта, который принимает несколько вариантов для изменения.css({top:y 'px', left:x 'px'})
2. Сработало для меня очень хорошо 🙂 Большое вам спасибо.
Ответ №3:
.attr
выполняется немедленно. Скорее всего, вам действительно нужно дождаться завершения загрузки изображения, а затем что-то сделать.
var $img = $("#bgImage");
$img.load(function(){
// image is done loading, do something
alert("worky (not cached)")
});
$img.attr('src','images/' bgImage);
Комментарии:
1. @Matt Этого я точно не знаю; код для проверки кэша изначально был не от меня, он взят из этого сообщения на форуме: forum.jquery.com/topic/wait-until-all-images-are-loaded
2. @Matt Хм … на самом деле это пришло не оттуда. Тогда я понятия не имею.
3. У меня такое чувство, что изначально это произошло из-за некоторой путаницы между XMLHttpRequest.readyState и
<img />
завершенным… Я бы поставил деньги на то, что он не существует.4. Очень интересно. Здесь нет IE9, но я верю вам на слово: P