Почему мобильные фиксированные нижние колонтитулы JQuery такие дерьмовые? - PullRequest
3 голосов
/ 07 октября 2011

Мобильные нижние колонтитулы JQuery неправильно прикреплены к нижней части экрана.В нормальном поведении они следуют за дном с отставанием.И в большинстве случаев она остается довольно глючной (она не отображается внизу экрана).

Мой вопрос: почему это так?

Примите во внимание, что:

  • Решения, кажется, работают достаточно хорошо для современного браузера и CSS (позиция: абсолютная, нижняя: 0px).Я думаю, что некоторые навигаторы не поддерживают это?Какие?И почему это так?
  • Сенсорный сенсорный сенсор, кажется, дает гораздо лучшую альтернативу в футляре.Но в чем секрет?Совместим ли он со всеми браузерами?
  • Jquery находится на своем .rc1 на момент этого вопроса.Вероятно, это не будет исправлено в выпуске JQuery mobile 1.0.( jQuery Mobile и фиксированный нижний колонтитул )

Ответы [ 4 ]

2 голосов
/ 07 октября 2011

Существует несколько плагинов прокручиваемого контента JavaScript, которые можно использовать для создания фиксированного нижнего колонтитула, который не сосет:

Я уверен, что есть еще, но это три, с которыми у меня был некоторый успех.Я решил использовать iScroll лично.

Чтобы получить хороший фиксированный нижний колонтитул, вы можете установить верхний колонтитул на position: absolute и top: 0, установить нижний колонтитул на position: absolute и bottom: 0, а затем установитьобласть содержимого на position: absolute, top: <bottom of header> и bottom: <top of footer>.

Одна проблема, с которой я столкнулся, заключается в том, что установка высоты документа на 100% не позволит прокрутить адресную строку вне поля зрения.,Чтобы это исправить, когда событие load срабатывает на объекте window, я установил высоту документа на 100 пикселей больше высоты экрана (window.innerHeight).Затем я прокручиваю до верхней части страницы ($.mobile.silentScroll(0)) и устанавливаю тайм-аут, чтобы сбросить высоту документа до 100%.

$(window).bind('load', function () {
    $.mobile.activePage.css({
        height       : (window.innerHeight + 100) + 'px',
        'min-height' : (window.innerHeight + 100) + 'px'
    }).find('[data-role="footer"]').css({
        bottom : '100px'
    });
    $.mobile.silentScroll(0);
    setTimeout(function () {
        $.mobile.activePage.css({
            height       : '100%',
            'min-height' : '100%'
        }).find('[data-role="footer"]').css({
            bottom : '0px'
        });
        if ($.mobile.activePage[0].id in myScroll) {
            myScroll[$.mobile.activePage[0].id].refresh();
        }
    }, 750);
});

Пример выше:

  1. Изменяет высоту текущей псевдостраницы на 100 пикселей больше, чем высота экрана.
  2. Изменяет положение нижнего колонтитула, чтобы он оставался на виду для всего процесса.
  3. Прокруткив верхнюю часть страницы (т.е. прокручивает адресную строку вне поля зрения).
  4. Устанавливает время ожидания для изменения размера текущей псевдостраницы до 100% и сброса положения нижнего колонтитула.Время ожидания необходимо, чтобы прокрутка могла произойти до того, как высота будет сброшена до 100%.
  5. Я использовал iScroll в этом коде и сохранил каждый экземпляр iScroll в массиве, чтобы я мог обновлять область содержимого iScroll всякий раз, когда я делализменения в DOM, которые повлияли на размер прокручиваемой области.

Я также запускаю событие загрузки для объекта окна при каждом изменении ориентации:

$(window).bind('orientationchange', function () {
    $(window).trigger('load');
});
2 голосов
/ 07 октября 2011

Из заметок о выпуске:

iOS5: Значительно улучшены переходы страниц и действительно исправлены панели инструментов

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

Именно поэтому мы очень взволнованы предстоящей поддержкой iOS5 для сенсорного нацеливанияверсия переполнения: авто, и правильная поддержка позиции: исправлена, которая учитывает внутренние области прокрутки с собственной прокруткой импульса с CSS.В бета-версии 3 мы добавили слой улучшения, чтобы использовать эти новые возможности CSS, чтобы позволить нам использовать как действительно «фиксированные» панели инструментов, так и сверхгладкие переходы в iOS5, используя веб-стандарты и совсем немного дополнительного кода.

0 голосов
/ 11 марта 2014

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

<div data-role="footer" data-position="fixed" style="position: absolute">
0 голосов
/ 30 августа 2012

Я работаю с Jquery. Mobile 1.2alpha, похоже, больше не проблема.data-position-'fixed' прекрасно работает

<footer data-role="footer" data-position="fixed">
<div data-role="navbar">
    <ul>
        <li><a href="#" onclick="$.mobile.changePage('/url/1');">Url 1</a></li>
        <li><a href="#" onclick="$.mobile.changePage('/url/2');">Url 2</a></li>
        <li><a href="#" onclick="$.mobile.changePage('/url/3');">Url 3</a></li>
        <li><a href="#" onclick="$.mobile.changePage('/url/4');">Url 4</a></li>
    </ul>
</div>
</footer>

Дополнительное предложение отключить "отскок в веб-просмотре", если вы разрабатываете для приложения-оболочки.http://community.phonegap.com/nitobi/topics/uiwebview_bounce

...