Получение JSON нарушает работу веб-сайта и не отображает контент должным образом

У меня есть сайт с большим количеством фотографий. У них один и тот же код с некоторыми изменениями. Я решил, что могу использовать массив с объектами для более удобной визуализации контента без повторного написания одного и того же HTML. Поэтому я написал простой код для .map() объектов и возвращаю строку, а затем .join('') строки. Теперь он отлично работает, используя только JS, но когда я попытался использовать JSON, он как бы сломался. JSON анализируется правильно, и моя функция возвращает правильный код для вставки в HTML, но когда я загружаю страницу, там ничего нет. Я вижу это в инспекторе, но на странице ничего не видно...

Мой код:

const paintingSection = document.querySelector(".painting-div-container");

const loadPictures = (picturesArr) => {
  paintingSection.innerHTML = picturesArr
    .map(
      (picture) =>
        `
<div class = "painting-container ${picture.align} scroll-hidden">
  <div class = "text-container">
    <h3 class = "absolute pain-head">${picture.heading}</h3>
    <p class = "absolute pain-info">${picture.description}</p>
  </div>
    <img
      src = "../../media/obrazy/v-zajeti-barev-2/${picture.fileName}"
      alt = "${picture.alt}"
      class = "painting"
      
    />
</div>
`
    )
    .join("");
};

fetch("./paintings.json")
  .then((response) => {
    if (!response.ok) {
      throw new Error("Network response was not ok " + response.statusText);
    }
    return response.json();
  })
  .then((data) => {
    loadPictures(data);
  })
  .catch((error) => {
    console.error("Error fetching the JSON file:", error);
  });

PS: Я знаю, что HTML не идеален, но я слишком отстой, чтобы сейчас все менять...

JSON:

[
  {
    "heading": "A jako Anděl - 2013",
    "description": "akryl na šepsované desce, 50x60",
    "fileName": "A-JAKO-ANDĚL.jpg",
    "alt": "A jako anděl - obraz",
    "align": "vert"
  },
  {
    "heading": "Barevná láska - 2013",
    "description": "akryl na plátně, 100x130",
    "fileName": "Barevná-láska-2.jpg",
    "alt": "Barevná láska 2 - obraz",
    "align": "hori"
  }
]

Результат, который я получил:

Ожидаемый результат:

Я попробовал console.infoging все, и это правильно. Даже в HTML все так, как должно быть, но отображения в принципе нет. Я получил одну ошибку в другой части моего кода, в которой говорилось, что img не определен. Может быть потому, что он не ждет синтаксического анализа...

HTML, который я получил:

<div class = "painting-container vert scroll-hidden">
  <div class = "text-container">
    <h3 class = "absolute pain-head">A jako Anděl - 2013</h3>
    <p class = "absolute pain-info">akryl na šepsované desce, 50x60</p>
  </div>
    <img src = "../../media/obrazy/v-zajeti-barev-2/A-JAKO-ANDĚL.jpg" alt = "A jako anděl - obraz" class = "painting">
</div>

попробуйте проверить страницу с помощью DevTools и посмотреть, сможете ли вы найти элементы и почему они скрыты.

IT goldman 02.07.2024 01:10

Для меня это похоже на проблему CSS.

Barmar 02.07.2024 01:24

Вы забыли установить высоту для painting-container или его родителей? Причиной может быть класс scroll-hidden. Может означать overflow: scroll hidden;, который устанавливает overflow-x на scroll и overflow-y на hidden.

Klaassiek 02.07.2024 03:47

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

Klaassiek 02.07.2024 03:49

О, scroll-hidden была проблема. У меня есть скрипт, который выполняет анимацию прокрутки, изменяя scroll-hidden, но он не ждет синтаксического анализа, поэтому не загружает элементы с этим классом.

Vojta Fluger 02.07.2024 09:53
Поведение ключевого слова "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
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Проблема заключалась в том, что у меня была настройка класса scroll-hidden, которая устанавливала непрозрачность равным 0. У меня также был скрипт, в котором есть наблюдатель пересечений, который проверяет, виден ли элемент, и если да, он удаляет этот класс, создавая анимацию прокрутки. Но скрипт работал до того, как какой-либо контент был загружен с помощью JSON. Таким образом, querySelectorAll() не загружал никаких элементов.

Исправлено путем создания функций для всего, что должно ждать JSON, и вызова этого в .then()

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