Разочаровывающий — модальный диалог iOS Safari / Chrome jQuery — предотвращение фоновой прокрутки

#jquery #ios #modal-dialog #mobile-safari #jquery-ui-dialog

#jquery #iOS #модальный диалог #мобильный-safari #jquery-ui-dialog

Вопрос:

я искал во многих местах и перепробовал множество решений и обходных путей для предотвращения фоновой прокрутки тела после открытия модала.

На самом деле, для Android и рабочего стола все работает отлично.

Единственная проблема связана с iOS.

После открытия модального диалогового окна я могу прокручивать фоновое тело, и все идет с сбоями (например, см. наложение, удаление модального диалога (вверх или вниз), не удается выйти из наложения, больше нельзя прокручивать), поэтому я застрял на веб-странице, ничего не могу сделать.

Итак, на данный момент единственное решение, которое я могу придумать, — это когда мобильный активирован, я показываю модальный диалог для всего размера экрана …….. я подумал… да, можно обойти, но iOS снова меня обманула

Итак, в тот момент, когда я сейчас нахожусь, я могу отключить iOS safari / Chrome только тогда, когда содержимое modal меньше высоты, я загружаю 2 фотографии, просто чтобы понять, что я имею в виду

ошибка прокрутки

нет ошибки прокрутки, когда содержимое модального больше высоты


var previousScrollY = 0;

     jQuery('#comp-modal').on('show.bs.modal', function (event) {
        previousScrollY = window.scrollY;
        var button = jQuery(event.relatedTarget);
        var pid = button.data('pid');
        var modal = jQuery(this);
        modal.find('.modal-body > .body-content').html();
        jQuery.get('/compatibility_ajax.php?p='   pid, function (data) {
            modal.find('.modal-body > .body-content').scrollTop(0);
            modal.find('.modal-body > .body-content').html(data);
        });
    });

    jQuery('#comp-modal').on('shown.bs.modal', function (event) {
        var $screensize = jQuery(window).width();
        if ($screensize < 768) {
            var modal = jQuery(this);
            modal.css('margin-top', jQuery(window).scrollTop());
            modal.css('height', window.screen.height);
            modal.find('.modal-body').css('height', 'calc(100vh - 124px)');
        }
    });

    jQuery(document).on('hidden.bs.modal', function() {
        jQuery('html').removeClass('modal-open').css({
            marginTop: 0,
            overflow: 'visible',
            left: 'auto',
            right: 'auto',
            top: 'auto',
            bottom: 'auto',
            position: 'static'
        });
        window.scrollTo(0, previousScrollY);
    });
});
  

Комментарии:

1. Возможно, это не очень поможет, но кто знает…. iOS 13 изменила некоторые вещи с действиями модальных диалогов по умолчанию. (Итак, мой первый вопрос: все ли работает должным образом в iOS 12.) Apple представила «карты» (возможно, я ошибаюсь с номенклатурой, но в принципе, пользователи могут просто убрать модальный). Да, все это никоим образом не связано с jQuery, поэтому, пожалуйста, не ругайтесь на меня 🙂 — но, сосредоточив внимание на стороне iOS вашего вопроса, есть ли что-то, что вы можете сделать, чтобы сделать эти модальности полноэкранными?

2. в конце я понимаю, как обмануть, потому что проблема в том, что содержимое внутри модального меньше для запуска внутренней прокрутки. Поэтому я просто добавляю текст по умолчанию под содержимым только для создания внутренней прокрутки, когда содержимое составляет всего 1-2 записи, и оно работает нормально =)