Скроллинг transform translateY и кроссбраузерная плавность

219
02 октября 2017, 03:00

Задача у меня была следующая: есть несколько слайдов с вертикальным перелистыванием при помощи нативного скроллинга браузера. Текущий активный слайд должен перекрывать следующий за ним, который в свою очередь должен быть закреплен к верхнему краю страницы (как position fixed, но только с помощью transform translate).

В Chrome, Opera и Yandex браузере все работает как надо, а вот в Edge, IE11, Firefox, мобильном и десктопном Safari, мобильном Chrome, нижний слайд дергается.

Буду благодарен за совет как это пофиксить.

PS. Пробовал translate3d, с ним дергается во всех браузерах, -moz и -webkit тоже не помогли.

Пример: https://jsfiddle.net/90h5dptq/

css:

body {
    margin: 0
}
.content{
    background: #fff;
    min-height: 100vh;
    padding: 15px;
    visibility: hidden
}
.content.shown {
    visibility: visible;
    position: absolute;
    z-index: 11
}
.content.shown + .content {
    visibility: visible;
    z-index: 9
}
.shadow {
    z-index: 10;
    position: fixed;
    top:0;
    width:100%;
    height:100%;
    background: #000;
    opacity: 0.3
}

html:

<div class="content shown">
    <h1>Слайд 1</h1>
    <p>Текст</p>
</div>
<div class="content" id="next">
    <h1>Слайд 2</h1>
    <p>Текст</p>
</div>
<div class="shadow"></div>

js:

// Устанавливаем размер
document.body.style.height = '0px';
var body = document.body,
    html = document.documentElement;
var height = Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight,
    html.scrollHeight, html.offsetHeight );
document.body.style.height = (height+window.innerHeight) + "px";
// Делаем смещение
window.onscroll = function(event) {
    var scrolled = document.body.getBoundingClientRect().top * -1;
    next.style.transform = 'translateY(' + scrolled + 'px)';
};
READ ALSO
Что означает запись !!arr.indexOf(&#39;green&#39;)

Что означает запись !!arr.indexOf('green')

Конкретно с indexOf() это сомнительная идеяПоскольку !!arr

219
Как создать get и set в функции-конструкторе?

Как создать get и set в функции-конструкторе?

Обычно в объектах get или set объявляют так:

225
Как &ldquo;сбросить&rdquo; ненужные стили?

Как “сбросить” ненужные стили?

Делаю встраиваемый js виджет, и проблема заключается в том, что стили страницы, на которую помещается js код, частично меняют внешний вид виджета

223