fast-je
@fast-je
Пишу на php.

Как сделать нормальное отображение modal popup?

Есть вот такой код js
function popup_w(title, animate, width, data_post, data_url){

    go_anima = (animate)? true : false ;

    var css_overflow = '';

    if(go_anima){
        $('#load').stop().animate({opacity: 'show'}, 200, "linear");
    }else{
        $('#load').css({display:'block'});
    }

    if($('div').is('#popup')){ $('#popup').remove(); }

    var popup = '<div id="popup" style="width:'+width+'px;">';
    popup += '<span class="closed-popup" onclick="closed_popup();">Закрыть</span>';
    popup += '<div class="title-popup">'+title+'</div>';
    popup += '<div class="text-popup" id="js-popup">';
    popup += '<img src="statica/img/load-offers1.gif" class="load-popup">';
    popup += '</div>';
    popup += '</div>';


    $('body').append(popup);

    left_s = ($(window).width() - $('#popup').outerWidth())/2 + $(window).scrollLeft();
    top_s = 100 + $(window).scrollTop();

    $('#popup').css({position:'absolute', left: left_s + 'px',top: top_s + 'px', display:'block'});



    $.ajax({
        url: data_url,
        type: 'POST',
        data: data_post,
        error: function (){ $('#js-popup').html('<div class="msg-error" style="margin:0;">Не удалось выполнить запрос!<br>Если ошибка повторяется, обратитесь к Администратору проекта.</div>'); },
        success: function (data){ $('#js-popup').html(data); }
    });

}


короче жмем на кнопку отправить подарок, когда скрол не до верху.

5b7347e6d7af4443883259.jpeg

получается норм вроде.
снизу сверху норм все. Плохо то что скролится прям с body.

5b7348394d626041775979.jpeg

и вот

5b7348681f402101606948.jpeg

Далее жмем на отправить подарок когда скрол внизу.

5b7348b14492a598142361.jpeg

и видим ужас modal окно просто внизу

5b734939e3048893888276.jpeg

а сверху дохрена места

5b73496d73062368539086.jpeg

Вообщем я понимаю что top_s = 100 + $(window).scrollTop(); от прокрученного скрола + 100px и получается такая бойда когда скрол внизу + 100, то modal окно будет внизу.
Можно конечно сделать так
top_s = 100;
$(window).scrollTop(100);
но это бред потому что если modal будет больше чем body, то будет вылизать за footer
что собственно показано дальше.

5b734cebaedaa240571007.jpeg

Видно что это все еще и не по центру window.
Короче хочу чтобы было как в вк. body стоит на месте, а если контента много modal окно скролится бдуто хз. Вообщем без понятия как это все реализовать, буду очень рад любой подсказки и помощи. Может какую библиотеку подрубить которая все это быстро сделает сама, я не знаю. Если кто захочет посмотреть на сайте все это как работает, пишите в телеграм: @fastje

5b734db4dcc89986777015.jpeg
5b734dd9058fb372781264.jpeg
5b734de3b2d18814299875.jpeg
  • Вопрос задан
  • 323 просмотра
Решения вопроса 1
profesor08
@profesor08 Куратор тега CSS
При открытии модалки добавляй body класс no-scroll, а в CSS припиши ему overflow: hidden.
А самому модальному окну задавай position: fixed
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 11:53
3000 руб./за проект
22 нояб. 2024, в 11:51
20000 руб./за проект
22 нояб. 2024, в 11:50
200000 руб./за проект