У Chrome 63+, Firefox 59+ та Opera 50+ ви можете це зробити в CSS:
body {
overscroll-behavior-y: none;
}
Це вимикає ефект резинки на iOS, показаний на скріншоті запитання. Однак він також вимикає функцію "поновлення та оновлення", ефект світіння та ланцюжок прокрутки.
Однак ви можете вибрати, щоб реалізувати власний ефект або функціональність при надмірній прокрутці. Якщо ви, наприклад, хочете розмити сторінку та додати акуратну анімацію:
<style>
body.refreshing #inbox {
filter: blur(1px);
touch-action: none; /* prevent scrolling */
}
body.refreshing .refresher {
transform: translate3d(0,150%,0) scale(1);
z-index: 1;
}
.refresher {
--refresh-width: 55px;
pointer-events: none;
width: var(--refresh-width);
height: var(--refresh-width);
border-radius: 50%;
position: absolute;
transition: all 300ms cubic-bezier(0,0,0.2,1);
will-change: transform, opacity;
...
}
</style>
<div class="refresher">
<div class="loading-bar"></div>
<div class="loading-bar"></div>
<div class="loading-bar"></div>
<div class="loading-bar"></div>
</div>
<section id="inbox"><!-- msgs --></section>
<script>
let _startY;
const inbox = document.querySelector('#inbox');
inbox.addEventListener('touchstart', e => {
_startY = e.touches[0].pageY;
}, {passive: true});
inbox.addEventListener('touchmove', e => {
const y = e.touches[0].pageY;
// Activate custom pull-to-refresh effects when at the top of the container
// and user is scrolling up.
if (document.scrollingElement.scrollTop === 0 && y > _startY &&
!document.body.classList.contains('refreshing')) {
// refresh inbox.
}
}, {passive: true});
</script>
Підтримка браузера
На цей час Chrome 63+, Firefox 59+ та Opera 50+ підтримують це. Edge публічно підтримував це, поки Safari невідомий. Відстежуйте прогрес тут і поточну сумісність браузера за допомогою документації MDN
Більше інформації