Сделайте пустой контейнер того же размера, что и другой контейнер с дочерним изображением, используя JS

Неправильный размер: Вот как это выглядит при загрузке:

Сделайте пустой контейнер того же размера, что и другой контейнер с дочерним изображением, используя JS



Правильный размер: Вот как это выглядит при изменении размера окна:

Сделайте пустой контейнер того же размера, что и другой контейнер с дочерним изображением, используя JS



ССЫЛКА НА ПРОЕКТ Вот справочная ссылка: https://wp.xingapps.win/

Инструкции: Наведите указатель мыши на черную кнопку «Купить Ejuice» в верхней части навигации, и вы увидите красные прямоугольники. Эти красные поля должны соответствовать высоте первого изображения, но не так.



История: У меня проблема: я пытаюсь уменьшить количество запросов изображений на странице. У меня есть сетка изображений. Вместо того, чтобы загружать все изображения одинаковой высоты и ширины, я просто загружу первое изображение, а другие изображения будут <div>, которые соответствуют высоте и ширине первого изображения. Затем я применю фоновые изображения CSS Sprite к этим div, чтобы они выглядели как обычные изображения. Это уменьшит количество запросов на странице в разы!

Проблема: Мой пример кода работает, когда я изменяю размер браузера - он будет идеально соответствовать высоте исходного изображения. Однако при начальной загрузке высота и ширина неверны. Почему-то немного меньше, чем должно быть. Не исправлено, пока я не изменю размер окна. Как мне это исправить?

Код:

(function($){
/* Match Quad Menu Div Height to one image */
var imgContainer = $('.mad-hat-parent-menu .quadmenu-product-float'),
    sourceImg = $('li#menu-item-15959 span.quadmenu-item-content');

function resizeDiv () {
    imgContainer.height(sourceImg.width());
    imgContainer.width(sourceImg.width());
}

$(window).on("load resize", function() { resizeDiv(); });

})(jQuery);

Примечание: (на самом деле я нацелен на контейнер первого изображения, а не на само изображение)

Дополнительно эту проблему трудно увидеть, если у вас ширина экрана меньше 1650 пикселей.

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

ggdx 22.05.2019 22:03

да, «при загрузке» должно быть покрыто это, хотя .. Также это последнее, что уже загружено в дом (скрипт)

KYSSE 22.05.2019 22:08

Нет, под нагрузкой именно так. Сама страница как документ, но она зависит от ресурсов, не являющихся частью страницы. То, что вы видите, фактически представляет собой текстовый файл, интерпретируемый как изображения, стили и т. д. и т. д. из парсеров в браузере. Страница загружена как текстовый документ (HTML — это текстовый документ) не обязательно означает, что 500 HTTP-запросов, которые вы будете делать для изображений, шрифтов, CSS, JS и т. д., будут в это время. Для дешевого, действительно дерьмового взлома, setTimeout(() => { // resizing in here }, 0) должен сделать это.

ggdx 22.05.2019 22:10

Если я установлю тайм-аут на любое число от 0 до 500, код работает, но не решает мою проблему. Если я устанавливаю тайм-аут на 600+, он вообще не работает.

KYSSE 23.05.2019 04:16

Привет, ребята! Я сделал скрипт JS здесь: jsfiddle.net/nLv0xt52/1/встроенный/результат У которого та же проблема.

KYSSE 23.05.2019 20:02
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
117
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обновлено: попробуйте использовать resizeDiv(), когда пользователь открывает/наводит/щелкает меню, например:

Нравиться:


$(".quadmenu-dropdown-toggle").on({
    mouseenter: function (e) {
      resizeDiv();
    },
    click: function(){
      resizeDiv();
    }
});

Или используйте «неправильный путь» с setTimeout, как упоминалось в @ggdx.

Will Silveira 22.05.2019 22:14

И предложение тайм-аута ggdx, и этот ответ, к сожалению, у меня не работают.

KYSSE 23.05.2019 04:17

Это блестящий подход. Однако он все еще не работает. Должно быть что-то еще не так =/ он захватывает размер, но это просто неправильный размер. Сбивает с толку.

KYSSE 23.05.2019 18:18

Я сделал скрипт JS здесь: jsfiddle.net/nLv0xt52/1/встроенный/результат У которого та же проблема.

KYSSE 23.05.2019 20:02

Кажется, это работает в вашей скрипке, не так ли? Единственное, что ломается, это многострочный текст на моем экране.

Will Silveira 26.05.2019 06:13

Другие вопросы по теме