Функция определения положения: исправлена - PullRequest
8 голосов
/ 02 апреля 2012

Я пытаюсь найти скрипт, который определяет, помещает ли устройство элементы position: fixed относительно ViewPort, а не ко всему документу.

В настоящее время стандартные браузеры для настольных компьютеров и Mobile Safari (для iOS 5) делают это, тогда как устройства Android размещают фиксированные элементы относительно всего документа.

Я нашел пару тестов, чтобы обнаружить это, но ни один из них, похоже, не работает:

Кто-нибудь знает, где найти / как написать тест, который фактически обнаруживает это? Я не хочу полагаться на перехват браузера.

Ответы [ 3 ]

9 голосов
/ 05 апреля 2012

По словам авторов Modernizr , вы не можете сделать это без обнаружения используемого браузера.Авторы довольно хорошо зарекомендовали себя в этой области.

Тестирование для position: fixed на устройствах iOS и Android приведено на вики-странице Undetectables в проекте Modernizr.

На сайте MobileHTML5 указана поддержка position:fixed.http://mobilehtml5.org/

5 голосов
/ 27 октября 2012

На самом деле, ребята из Filament Group сделали умную вещь со своим исправленным исправлением, вставив в свой тест строку с пользовательским агентом известных ложных срабатываний.

Проверьте это @ http://github.com/filamentgroup/fixed-fixed

Кто-томожет дополнить его некоторыми ложными отрицаниями и сделать его современным тестом на фурор.

1 голос
/ 14 августа 2013

Я создал еще одну проверку, действительно ли position:fixed поддерживается в браузере.Он создает фиксированный div и пытается прокрутить и проверить, изменилась ли позиция div.

function isPositionFixedSupported(){
    var el = jQuery("<div id='fixed_test' style='position:fixed;top:1px;width:1px;height:1px;'></div>");
    el.appendTo("body");

    var prevScrollTop = jQuery(document).scrollTop();
    var expectedResult = 1+prevScrollTop;
    var scrollChanged = false;

    //simulate scrolling
    if (prevScrollTop === 0) {
        window.scrollTo(0, 1);
        expectedResult = 2;
        scrollChanged = true;
    }

    //check position of div
    suppoorted = (el.offset().top === expectedResult);

    if (scrollChanged) {
        window.scrollTo(0, prevScrollTop);
    }

    el.remove();

    return suppoorted;
}

Эта функция была протестирована в Firefox 22, Chrome 28, IE 7-10, Android Browser 2.3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...