Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Подгрузить картинку после вызова модального окна. (https://javascript.ru/forum/jquery/60425-podgruzit-kartinku-posle-vyzova-modalnogo-okna.html)

DartV 28.12.2015 17:18

Подгрузить картинку после вызова модального окна.
 
Добрый день!

Задача стоит приблизительно следующая:

На странице есть 6 модальных окон, которые содержат большие и тяжелые изображения. Грузить их сразу нет никакого смысла, поэтому хочу подгружать их только при вызове модалки.

Модальное окно:

<div data-wow-delay="0.2s" class="grid_4 wow fadeInRight">
			        <div class="single_image" onclick="document.getElementById('win1').style.display='block';$('html,body').css('overflow','hidden');">
                        <img src="http://livedemo00.template-help.com/wt_55108/images/page-4_img01.jpg" alt="">
                        <div class="image_overlay">
                            <a href="">View Full Project</a>
                            <h2>drawing</h2>
                            <h4>with pencil colors</h4>
                        </div>
                    </div>
              </div>

<div class="dm-overlay" id="win1" onclick="document.getElementById('win1').style.display='none';$('html,body').css('overflow','auto');">
        <div class="dm-table">
            <div class="dm-cell">
                <div class="dm-modal cyan">
                    <a href="#close" class="close"></a>
                    <h3>Модальный блок №3 абсолютно по центру.(тест)</h3>
                        <img src="http://sdlweb.ru/img/09-Villa.jpg">
                    <p>Окно выводится строго по центру, тест</p>
                </div>
            </div>
        </div>
</div>


Я новичок, сильно не ругайте!

рони 28.12.2015 17:37

DartV,
http://javascript.ru/forum/project/4...-po-kliku.html

DartV 28.12.2015 17:39

огромное спасибо за ответ, но это не совсем то, что бы я хотел.

рони 28.12.2015 17:45

DartV,
что мешает прописать в картинках маленький прелоадер а по клику менять прелоадер на большую картинку?

DartV 28.12.2015 17:47

Не вижу в этом выход. Можно ведь просто подгружать аяксом при клике в мою модалку?

рони 28.12.2015 18:03

Цитата:

Сообщение от DartV
Можно ведь просто подгружать аяксом при клике в мою модалку?

бред какой-то ...
<div data-wow-delay="0.2s" class="grid_4 wow fadeInRight">
			        <div class="single_image" onclick="var d = document.getElementById('win1');d.querySelector('img').src='http://sdlweb.ru/img/09-Villa.jpg';d.style.display='block';$('html,body').css('overflow','hidden');return false;">
                        <img src="http://livedemo00.template-help.com/wt_55108/images/page-4_img01.jpg" alt="">
                        <div class="image_overlay">
                            <a href="">View Full Project</a>
                            <h2>drawing</h2>
                            <h4>with pencil colors</h4>
                        </div>
                    </div>
              </div>

<div class="dm-overlay" id="win1" onclick="document.getElementById('win1').style.display='none';$('html,body').css('overflow','auto');return false;">
        <div class="dm-table">
            <div class="dm-cell">
                <div class="dm-modal cyan">
                    <a href="#close" class="close"></a>
                    <h3>Модальный блок №3 абсолютно по центру.(тест)</h3>
                        <img src="http://pampinta.com/imgs/img_loader.gif">
                    <p>Окно выводится строго по центру, тест</p>
                </div>
            </div>
        </div>
</div>

DartV 28.12.2015 18:13

Что бред? )

Придумал вот такую реализацию для себя:

<script>
      function content_dop_img() {
        document.getElementById('content_dop_img').innerHTML = '<img src="http://sdlweb.ru/img/09-Villa.jpg">';
      }
    </script>
<div id="content_dop_img"></div>


Всё ли верно я сделал? Повторюсь, я только начал изучать JS!

рони 28.12.2015 18:18

DartV,
как проще всего смотрите 6 пост ... зачем грузить что-то кроме src?

DartV 28.12.2015 18:22

Цитата:

Сообщение от рони (Сообщение 401762)
DartV,
как проще всего смотрите 6 пост ... зачем грузить что-то кроме src?

Отлично! Спасибо большое.

Ну и ещё вопрос, как это все содержимое onclick убрать из html кода непосредственно в файл js?

рони 28.12.2015 18:36

DartV,
$(function() {
    var $overlay = $(".dm-overlay");
    $(".single_image").on("click", function(event) {
        event.preventDefault();
        $overlay.show().find("img")[0].src = "http://sdlweb.ru/img/09-Villa.jpg";
        $("html,body").css({
            "overflow": "hidden"
        })
    });
    $overlay.on("click", function(event) {
        event.preventDefault();
        $overlay.hide();
        $("html,body").css({
            "overflow": "auto"
        })
    })
});

DartV 28.12.2015 18:49

рони,

Огромное спасибо!

Всего на страничке 6 модалок и в каждой своя картинка:

<div class="dm-overlay" id="win1" ...
<div class="dm-overlay" id="win2" ...
<div class="dm-overlay" id="win3" ...
<div class="dm-overlay" id="win4" ...
<div class="dm-overlay" id="win5" ...
<div class="dm-overlay" id="win6" ...


Как это учесть?

рони 28.12.2015 19:01

DartV,
<div class="single_image" data-src="http://sdlweb.ru/img/09-Villa.jpg"

$(function() {
    var $overlay = $(".dm-overlay"), $single = $(".single_image");
    $single.on("click", function(event) {
        event.preventDefault();
        var i = $single.index(this);
        $overlay.eq(i).show().find("img")[0].src = $(this).data('src');
        $("html,body").css({
            "overflow": "hidden"
        })
    });
    $overlay.on("click", function(event) {
        event.preventDefault();
        $overlay.hide();
        $("html,body").css({
            "overflow": "auto"
        })
    })
});

DartV 28.12.2015 19:11

Странно, но теперь при клике по блоку не вызывается модалка. Что-то сломалось. Всё 3 раза перепроверил и откатывал обратно.

рони 28.12.2015 19:31

DartV,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
 <style type="text/css">
.dm-overlay {
   display: none;
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    margin: 0 auto;
    width: 200px;
    height: 200px;

}

</style>
<script>
 $(function() {
    var $overlay = $(".dm-overlay"), $single = $(".single_image");
    $single.on("click", function(event) {
        event.preventDefault();
        var i = $single.index(this);
        $overlay.eq(i).show().find("img")[0].src = $(this).data('src');
        $("html,body").css({
            "overflow": "hidden"
        })
    });
    $overlay.on("click", function(event) {
        event.preventDefault();
        $overlay.hide();
        $("html,body").css({
            "overflow": "auto"
        })
    })
});
</script>
</head>

<body>
<div data-wow-delay="0.2s" class="grid_4 wow fadeInRight">
			        <div class="single_image" data-src="http://sdlweb.ru/img/09-Villa.jpg">
                        <img src="http://livedemo00.template-help.com/wt_55108/images/page-4_img01.jpg" alt="">
                        <div class="image_overlay">
                            <a href="">View Full Project</a>
                            <h2>drawing</h2>
                            <h4>with pencil colors</h4>
                        </div>
                    </div>
              </div>

<div class="dm-overlay">
        <div class="dm-table">
            <div class="dm-cell">
                <div class="dm-modal cyan">
                    <a href="#close" class="close"></a>
                    <h3>Модальный блок №3 абсолютно по центру.(тест)</h3>
                        <img src="http://pampinta.com/imgs/img_loader.gif">
                    <p>Окно выводится строго по центру, тест</p>
                </div>
            </div>
        </div>
</div>
<div data-wow-delay="0.2s" class="grid_4 wow fadeInRight">
			        <div class="single_image" data-src="http://sdlweb.ru/img/09-Villa.jpg">
                        <img src="http://livedemo00.template-help.com/wt_55108/images/page-4_img01.jpg" alt="">
                        <div class="image_overlay">
                            <a href="">View Full Project 2</a>
                            <h2>drawing</h2>
                            <h4>with pencil colors</h4>
                        </div>
                    </div>
              </div>

<div class="dm-overlay">
        <div class="dm-table">
            <div class="dm-cell">
                <div class="dm-modal cyan">
                    <a href="#close" class="close"></a>
                    <h3>Модальный блок №3 абсолютно по центру.(тест) 2</h3>
                        <img src="http://pampinta.com/imgs/img_loader.gif">
                    <p>Окно выводится строго по центру, тест</p>
                </div>
            </div>
        </div>
</div>
</body>

</html>

DartV 28.12.2015 19:55

Я понял в чем беда. В дургих блоках у меня слудующая конструкция:

<div data-wow-delay="0.4s" class="grid_4 wow fadeInRight">
<div data-wow-delay="0.2s" class="grid_4 wow fadeInLeft">


Я верно понимаю, что data-wow-delay="0.4s" как раз мешает открытию модалки? Как это поправить?

рони 28.12.2015 20:04

DartV,
изучить селекторы и поправить код согласно вашему html

рони 28.12.2015 20:04

Цитата:

Сообщение от DartV
Я верно понимаю, что data-wow-delay="0.4s"

это совершенно не причём

DartV 28.12.2015 20:27

рони,

Прошу прощения, все заработало!

Я не учел, что <div class="dm-overlay"> ... нужно скопировать 6 раз.

Возможно ли сделать всего 1 контейнер <div class="dm-overlay"> , а в нём только подменять картинку?

рони 28.12.2015 20:39

Цитата:

Сообщение от DartV
Возможно ли сделать всего 1 контейнер

а подумать?
убрать .eq(i) и var i = $single.index(this);

DartV 28.12.2015 20:42

рони,

ещё раз спасибо!


Часовой пояс GMT +3, время: 05:36.