@rises

Как запретить создавать объекты, после создания одного?

Для того чтобы карта яндекса загружалась не сразу с загрузкой страницы, а только когда пользователь до нее доскролит было написано вот это
$(window).scroll(function () {
    var el = $('.map');
    if ($(this).scrollTop() > el.offset().top - 800) {
    var script = document.createElement('script');
    script.src = "https://api-maps.yandex.ru/services/constructor/1.0/js/?um=constructor%3A114d3eb4d1680b26a069e6412a7102973f0bf72f6c99f019d48be4101695e679&width=100%25&height=640&lang=ru_RU&scroll=false";
    
    el.append(script);
  };
  });

Свою задачу эта конструкция конечно решила, но появилась новая проблема, карта создается не одна, а много, чего собственно и надо избежать
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Не задумываясь глубоко над тем как это можно было бы реализовать правильно и красиво (просто добавил флаг isMapAdded:)
var isMapAdded = false;

$(window).scroll(function () {
  var el = $('.map');
  if ($(this).scrollTop() > el.offset().top - 800) {
    if(isMapAdded) return;
    isMapAdded = true;
    var script = document.createElement('script');
    script.src = "https://api-maps.yandex.ru/services/constructor/1....";
    el.append(script);
  };
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Проверяйте создана ли карта, и если уже есть - не создавайте новую.
И лучше не через DOM, а заведите флаг.
Ответ написан
Комментировать
iamd503
@iamd503
Верстальщик
Можно так сделать
var mapFlag = false;
$(window).scroll(function () {
if (mapFlag == true) {
var el = $('.map');
if ($(this).scrollTop() > el.offset().top - 800) {
var script = document.createElement('script');
script.src = "https://api-maps.yandex.ru/services/constructor/1....";

el.append(script);
mapFlag = false;
}
}
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы