Кроссбаузерный скроллинг

в 4:59, , рубрики: javascript, parallax, scroll, touch, Веб-разработка, Мобильный веб, метки: , , ,

На сегодняшний день эффекты при скроллинге набрали достаточно большую популярность (так называемый параллакс). Но, к сожалению, эти эффекты нейтивно не поддерживаются мобильными устройствами. Не так давно Mark Dalgleish предложил свой вариант решения этой проблемы:

Библиотеки

Выбираем одну из тач-библиотек:
iScroll by Matteo Spinelli
Scrollability by Joe Hewitt
Zynga Scroller by Zynga

И подключаем Modernizr

Обертка

Если ваш выбор пал на iScroll, вам следует поместить контент внутри блоков #wrapper и #scroller

<div id="wrapper">
    <div id="scroller">
        <ul>
            <li>...</li>
        </ul>
    </div>
</div>

Определяем тач-устройство с помощью Modernizr и создаем для него новый экземпляр iScroll

var myScroller = Modernizr.touch ? new iScroll('scroller') : null;

Добавляем стили

#wrapper {
   overflow: auto;
}
/* Переопределяем #wrapper для тач-устройств */
/* Класс head.touch создается Modernizer'ом в случаи если ваш браузер поддерживает тач-ивенты */
.touch #wrapper {
   overflow: hidden;
}

Функция для нормализации позиции скрола

function getScroll(elem, iscroll) {
  var x, y;
  if (Modernizr.touch && iscroll) {
    x = iscroll.x * -1;
    y = iscroll.y * -1;
  } else {
    x = elem.scrollTop;
    y = elem.scrollLeft;
  }
  return {x: x, y: y};
}

Финальный штрих

var myScroller = Modernizr.touch ? new iScroll('scroller') : null;
(function animationLoop(){
    window.requestAnimationFrame(animationLoop);

    var scroll = getScroll(window, myScroller);

    // Теперь мы можем использовать кроссплатформенные координаты
    scroll.x;
    scroll.y;
})();

Почему для анимации следует использовать requestAnimationFrame

Автор: vermilion1

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js