За последние 24 часа нас посетили 55206 программистов и 1781 робот. Сейчас ищут 863 программиста ...

Показать / скрыть карту

Тема в разделе "JavaScript и AJAX", создана пользователем segazav, 14 май 2015.

  1. segazav

    segazav Активный пользователь

    С нами с:
    9 янв 2011
    Сообщения:
    48
    Симпатии:
    0
    Всем здравствуйте!
    Вместе со страницей сайта грузится Яндекс карта и очень замедляет загрузку всей страницы.
    Подскажите, пожалуйста, как сделать, чтобы она загружалась только при клике на кнопку:
    Код (Text):
    1. <input type="button" id="karta" class="knopka_poisk" value="Показать карту">
    и закрывалась при клике на эту же кнопку, но уже с value="Скрыть карту"

    Сама карта выводится в теге:
    Код (Text):
    1. <div align="center" id="YMapsID" style="width:560px; height:300px" class="img_podaty"></div>
    Вот отрывок JS кода загрузки карты на страницу:
    Код (Text):
    1. <script type="text/javascript">
    2. window.onload = function () {
    3. map = new YMaps.Map(document.getElementById("YMapsID"));
    4. map.addControl(new YMaps.TypeControl());
    5. map.addControl(new YMaps.Zoom());
    6. map.addControl(new YMaps.SearchControl({noPlacemark: true}));
    7. button = new YMaps.ToolBarButton({caption: "<b>Удалить метку</b>", hint: "Очистить карту"});
    8. map.addControl(new YMaps.ToolBar([button]));
    9.  
    10. metka_map = "<?php if (!empty($_POST['metka'])) {$metka = $_POST['metka']; echo $metka;} else {$metka = ""; echo "нет";}?>";
    11. mashtab_map = "<?php if (!empty($_POST['mashtab'])) {$mashtab = $_POST['mashtab']; echo $mashtab;} else {$mashtab = ""; echo "нет";}?>";
    12. ...........
    13. </script>
     
  2. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    у тебя скрипт навешан на
    Код (Text):
    1. <script type="text/javascript">
    2. window.onload = function () {}
    переделай на клик. Или все сложнее? :)
     
  3. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  4. segazav

    segazav Активный пользователь

    С нами с:
    9 янв 2011
    Сообщения:
    48
    Симпатии:
    0
    Нужно, чтобы карта грузилась и открывалась только при нажатии
    Код (Text):
    1. <input type="button" id="karta" class="knopka_poisk" value="Показать карту">
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Замени
    window.onload
    на
    document.getElementById('karta').onclick

    А дальше сам думай)
     
  7. segazav

    segazav Активный пользователь

    С нами с:
    9 янв 2011
    Сообщения:
    48
    Симпатии:
    0
    Код (Text):
    1. <script type="text/javascript">
    2. document.getElementById('karta').onclick = function () {
    3. map = new YMaps.Map(document.getElementById("YMapsID"));
    4. map.addControl(new YMaps.TypeControl());
    5. map.addControl(new YMaps.Zoom());
    6. map.addControl(new YMaps.SearchControl({noPlacemark: true}));
    7. button = new YMaps.ToolBarButton({caption: "<b>Удалить метку</b>", hint: "Очистить карту"});
    8. map.addControl(new YMaps.ToolBar([button]));
    9. ....
    Не работает(

    И отображается пустой
    Код (Text):
    1. <div align="center" id="YMapsID" style="width:560px; height:300px" class="img_podaty"></div>
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    В консоли что пишет?
     
  9. segazav

    segazav Активный пользователь

    С нами с:
    9 янв 2011
    Сообщения:
    48
    Симпатии:
    0
    В какой консоли?
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    В JS-консоли браузера же.
     
  11. segazav

    segazav Активный пользователь

    С нами с:
    9 янв 2011
    Сообщения:
    48
    Симпатии:
    0
    TypeError: document.getElementById(...) is null
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    segazav код после инициализации DOM запускаешь?
     
  13. segazav

    segazav Активный пользователь

    С нами с:
    9 янв 2011
    Сообщения:
    48
    Симпатии:
    0
    Между тегами <head></head>
     
  14. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Оберни весь этот код дополнительно.

    document.body.onload = function(){

    };

    Ну или любой другой альтернативой, которая сработает только после загрузки body.
     
  15. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    так надо после инициализации DOM элемента, например после тега с id karta прописать твой скрипт
     
  16. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Или на онлоад повесить :)
     
  17. segazav

    segazav Активный пользователь

    С нами с:
    9 янв 2011
    Сообщения:
    48
    Симпатии:
    0
    Код (Text):
    1. <script type="text/javascript">
    2. document.body.onload = function(){
    3. document.getElementById('karta').onclick = function () {
    4. map = new YMaps.Map(document.getElementById("YMapsID"));
    Не работает и в консоли пишет: TypeError: document.body is null
     
  18. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Окей, оборачивайте все в
    Код (Text):
    1. function loadMaps(){
    2.  
    3. };
    И в событие. По аналогии:

    Код (Text):
    1. function loadMaps(){
    2.   document.getElementById('karta').onclick = function () {
    3.     //ваш код, который выполнится по клику на кнопку
    4.   };
    5. };
    а тегу body, в разметке, допишите событие, чтобы было так:

    <body onload="loadMaps()">
     
  19. segazav

    segazav Активный пользователь

    С нами с:
    9 янв 2011
    Сообщения:
    48
    Симпатии:
    0
    Так заработало.
    В этом случае карта при клике загружается или просто открывается?
    Как убрать отображение пустого тега div перед нажатием кнопки?
    Код (Text):
    1. <div align="center" id="YMapsID" style="width:560px; height:300px" class="img_podaty"></div>
     
  20. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Загружается. До клика она загружена не будет.

    можешь ему display: none поставить.
    А можно его самого создавать по клику и втыкать куда надо.

    Ну а потом заведи условие, мол карта загружена и показана или нет. И, при повторном клике, проверяй его. Если не загружена, загружать, если загружена и скрыта, показать не загружая заново, если показана, скрыть.
     
  21. segazav

    segazav Активный пользователь

    С нами с:
    9 янв 2011
    Сообщения:
    48
    Симпатии:
    0
    Все получилось!!! Спасибо всем участникам!!!
    Особенную благодарность хочу выразить участнику этого форума "Fell-x27" за очередную помощь!
     
  22. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Не за что. Если человек готов учиться и, после пары наставлений способен, по абстрактному описанию решения, довести его до состояния "все получилось", это уже лучше любого "спасибо".