#javascript #jquery
#javascript #jquery
Вопрос:
Когда я загружаю свою страницу и использую $('div.logo').width()
ее, возвращает огромное значение 6500
, что неверно. Изображение имеет ширину всего 130 пикселей.
Но, если я использую setTimeout
и проверяю $('div.logo').width()
через несколько секунд, он возвращает правильную ширину.
Почему это должно быть? Весь мой CSS должен быть уже загружен, так почему пауза в несколько секунд будет иметь значение?
Комментарии:
1. Его причина в том, что при запуске вашего кода изображение не загружается.
2. Когда вы проверяете
width
использование$('.logo img').width()
? Возможно, изображение не загружается при проверке.
Ответ №1:
Вы должны проверить ширину изображения после загрузки изображения.
Так что либо:
// NOTE: not $(document).ready
$(window).load(function() {
var width = $('.logo img').width();
});
Или
$('.logo img').load(function() {
var width = $(this).width();
});
должен дать правильную ширину.
Комментарии:
1. Нет, проблема не в этом. Это
$('.logo').width()
также происходит с.2.
.logo
это div, внутри которого есть изображение.3. @NicHubbard Так вот в чем причина.
Ответ №2:
Установите атрибуты width
и height
для изображения. Вы также можете указать размер в CSS. Тогда браузер будет знать, какого размера будет изображение, прежде чем оно загрузится.
Комментарии:
1.
.width()
получит вычисленную ширину, а не ширину атрибута: api.jquery.com/width2. @mikedidthis если вы установите
width
attrimg
тега, тоwidth
на самом деле он будетimg
иметь значение, когда он будет отображаться браузером, так что это вычисленная ширина. Также рекомендуется устанавливатьwidth
иheight
для изображения, чтобы браузер знал это до загрузки изображения.3. @t.niese это правда, но если OP CSS устанавливает
max-width: 100%
, то значение неверно.4. @mikedidthis если OP установит значение css
max-width: 100%
равным , изображение будет иметь ширину130px
, а затем контейнер будет иметь ширину100px
$('div.logo').width()
100
. Но это произойдет в обоих случаях (независимоwidth
от того, установлен attr или нет).5. Ах, спасибо за разъяснение. Я согласился, что хорошей практикой является установка атрибутов
width
/height
. Пример здесь, если кому-то интересно: jsbin.com/xasuf/1/edit
Ответ №3:
Это потому, что изображение еще не загружено, поэтому начальный размер основан на CSS или угадан. Вы можете использовать:
$('.logo img').load(function() {
var width = $(this).width();
});
Ответ №4:
Изображение загружается с GET
помощью метода, поэтому вам нужно проверить его после,
$('.logo img').load(function(){
//your code
});
Если вы хотите, чтобы ваше изображение загружалось мгновенно, вы можете использовать изображение BASE64.
Более подробную информацию смотрите здесь
Ответ №5:
это может быть javascript, изменяющий макет страницы, например, это могут быть теги скрипта, включенные в нижнюю часть страницы, или любой другой код javascript, выполняемый в событиях jQuery ready или load. Например, если этот код добавляет html-код, это может повлиять на вашу ширину.логотип div.
Другая возможность заключается в том, что ваш html неверен, чтобы проверить это, просто запустите любой валидатор HTML следующим образом http://www.freeformatter.com/html-validator.html . Принимая HTML со своей страницы для проверки, имейте в виду, что некоторые браузеры исправляют неправильный HTML, поэтому лучше получить его из вашего исходного кода.