Trong Chrome 63+, Firefox 59+ và Opera 50+, bạn có thể thực hiện việc này trong CSS:
body {
overscroll-behavior-y: none;
}
Điều này vô hiệu hóa hiệu ứng đai cao su trên iOS được hiển thị trong ảnh chụp màn hình của câu hỏi. Tuy nhiên, nó cũng vô hiệu hóa các hiệu ứng kéo để làm mới, phát sáng và chuỗi cuộn.
Tuy nhiên, bạn có thể chọn triển khai hiệu ứng hoặc chức năng của riêng mình khi cuộn quá mức. Ví dụ: nếu bạn muốn làm mờ trang và thêm hoạt ảnh gọn gàng:
<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>
Hỗ trợ trình duyệt
Kể từ khi viết bản này, Chrome 63+, Firefox 59+ và Opera 50+ hỗ trợ nó. Edge công khai hỗ trợ nó trong khi Safari là một ẩn số. Theo dõi tiến trình tại đây và khả năng tương thích của trình duyệt hiện tại tại tài liệu MDN
Thêm thông tin