En Chrome 63+, Firefox 59+ y Opera 50+ puedes hacer esto en CSS:
body {
overscroll-behavior-y: none;
}
Esto desactiva el efecto de goma elástica en iOS que se muestra en la captura de pantalla de la pregunta. Sin embargo, también deshabilita la función de extracción para actualizar, los efectos de brillo y el encadenamiento de desplazamiento.
Sin embargo, puede optar por implementar su propio efecto o funcionalidad al realizar el desplazamiento excesivo. Si, por ejemplo, desea difuminar la página y agregar una animación ordenada:
<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>
Soporte del navegador
En el momento de escribir estas líneas, Chrome 63+, Firefox 59+ y Opera 50+ lo admiten. Edge lo apoyó públicamente, mientras que Safari es un desconocido. Siga el progreso aquí y la compatibilidad actual del navegador en la documentación de MDN
Más información