Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.04.2016, 16:47
Новичок на форуме
Отправить личное сообщение для Maksim63 Посмотреть профиль Найти все сообщения от Maksim63
 
Регистрация: 28.04.2016
Сообщений: 1

Модальное окно c input и iOS
Здравствуйте.
Возник вопрос по модальным окнам. Я использую Bootstrap 3. При использовании модального окна с элементами input, у него есть проблема – при вызове экранной клавиатуры некорректно отрабатываются элементы с fixed position. Проще говоря, когда тыкаем в input происходят нехорошие рывки. Чтобы обойти эту проблему есть два варианта, первый это задать модальному окну position absolute, а второй – вызвать таймер при событии focus и скорректировать позицию.
Я попробовал с помощью скрипта сделать первый вариант. После открытия модального окна задать позицию absolute. Это работает. Но если документ длинный – модальное окно скроллится вместе с ним, а до и после окна получаются некрасивые большие промежутки.
Чтобы избавится от них можно ограничить скролл, но не знаю как. Поэтому решил сделать так, при открытие окна у него position fixed и оно скроллится в пределах своего размера. При событии focus (когда тыкаем в input) у окна position absolute, что позволяет нормально вызвать клавиатуру и корретно отработать скроллы при заполнении полей input.
Окончательный вариант скрипта такой. Но работает он некорректно. Подскажите как правильнее решить задачу, в какую сторону копать ?

$(document).ready(function(){
    var isiPhone = /iPhone/i.test(navigator.userAgent.toLowerCase());
        if(isiPhone) {
        $('.modal').on('shown.bs.modal', function() {
            $(this)
                .css({
                position: 'absolute',
                marginTop: $(window).scrollTop() + 'px',
                bottom: 'auto',
                });
                 
        setTimeout( function() {
            $('.modal-backdrop').css({
                position: 'absolute', 
                top: 0, 
                left: 0,
                width: '100%',
                height: Math.max(
                document.body.scrollHeight, document.documentElement.scrollHeight,
                document.body.offsetHeight, document.documentElement.offsetHeight,
                document.body.clientHeight, document.documentElement.clientHeight
                ) + 'px'
            });
        }, 500);
        
        var currentAbsoluteScroll = $(window).scrollTop();
            
             $('.modal').css({
                position: 'fixed',
                marginTop: 'auto',
                bottom: '0',
                });
            
            var currentFixedScroll = $(window).scrollTop();
            
        $('input').on('focus', function() {
                  $('.modal').css({
                    position: 'absolute',
                    marginTop: $(window).scrollTop() + 'px',
                    bottom: 'auto',
                    });
                    $(window).scrollTop(currentAbsoluteScroll);
        });
            
        $('input').on('blur', function() {
                    if (!event.relatedTarget) {
                        $(window).scrollTop(currentAbsoluteScroll);
                    }
                    $('.modal').css({
                        position: 'fixed',
                        marginTop: 'auto',
                        bottom: '0',
                    });
                    $(window).scrollTop(currentFixedScroll);
        });
     });
}});
</script>
Ответить с цитированием
  #2 (permalink)  
Старый 23.12.2016, 17:20
Новичок на форуме
Отправить личное сообщение для Sedi Посмотреть профиль Найти все сообщения от Sedi
 
Регистрация: 23.12.2016
Сообщений: 1

такая же проблема. есть решения?
Ответить с цитированием
  #3 (permalink)  
Старый 23.12.2016, 17:53
Профессор
Отправить личное сообщение для Царь Леонид Посмотреть профиль Найти все сообщения от Царь Леонид
 
Регистрация: 22.08.2013
Сообщений: 217

Я сталкивался с этим, это баг браузера, решал, как советовал парень в самом низу этого треда
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Модальное окно. Salvat Элементы интерфейса 4 25.02.2016 09:33
Модальное окно на input lautes Общие вопросы Javascript 8 18.02.2014 14:40
Bootstrap модальное окно igor.3dviz Общие вопросы Javascript 1 09.02.2014 13:27
При добавлении DOCTYPE "плывут" размеры input type=text Demath (X)HTML/CSS 4 08.07.2012 19:27
Как передать текст в input в модальное окно открытое jquery SpiritDark Элементы интерфейса 0 28.04.2012 21:46