Ответ 1
Я нашел polyfill: https://github.com/zigotica/scrollSnapPointsPolyfill
Не тестировали его экстенсивно.
Firefox 39, Safari 9 и IE11 обеспечивают поддержку точек привязки CSS Scroll. Chrome имеет функцию в разработке.
Есть ли polyfill, который будет эмулировать следующие стили CSS:
-webkit-scroll-snap-type: mandatory;
-ms-scroll-snap-type: mandatory;
scroll-snap-type: mandatory;
-webkit-scroll-behavior: smooth;
-ms-scroll-behavior: smooth;
scroll-behavior: smooth;
-webkit-scroll-snap-points-y: repeat(600px);
-ms-scroll-snap-points-y: snapInterval(0px, 600px); /* Old syntax */
scroll-snap-points-y: repeat(600px);
overflow-y: auto;
overflow-x: hidden;
пока функция не будет реализована Chrome?
Я нашел polyfill: https://github.com/zigotica/scrollSnapPointsPolyfill
Не тестировали его экстенсивно.
Здесь другой polyfill: https://github.com/ckrack/scrollsnap-polyfill/
Следует также отметить, что спецификация CSS Snap Points изменилась и больше не включает некоторые из запрошенных свойств, а также добавив новые.
Если вы захотите рассмотреть возможность повторной реализации ванильной javascript этой функции с последовательным поведением кросс-браузера, вы можете использовать эта библиотека
Основная причина использования этого вместо собственного решения css заключается в том, что он работает во всех современных браузерах и имеет настраиваемую конфигурацию, позволяющую настраивать синхронизацию при переходе и прокрутке.
Библиотека повторно реализует функцию привязки css с использованием функций ослабления javascript в ваниле и работает с использованием значений свойств элемента контейнера scrollTop
/scrollLeft
и прокрутки Event Listener
import ScrollSnap from 'scroll-snap'
const snapConfig = {
scrollSnapDestination: '90% 0%', // scroll-snap-destination css property, as defined here: https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-destination
scrollTimeout: 100, // time in ms after which scrolling is considered finished
scrollTime: 300 // time in ms for the smooth snap
}
function callback () {
console.log('called when snap animation ends')
}
const element = document.getElementById('container')
const snapObject = new ScrollSnap(element, snapConfig)
snapObject.bind(callback)
// unbind the element
// snapObject.unbind();