Предотвратить "overscrolling" веб-страницы
в Chrome для Mac, можно "overscroll" страницы (за неимением лучшего слова), как показано на скриншоте ниже, чтобы увидеть "что там за спиной", похож на iPad или iPhone.
Я заметил, что некоторые страницы отключены, например gmail и страница "новая вкладка".
Как я могу отключить "overscrolling"? Есть ли другие способы, с помощью которых я могу контролировать "overscrolling"?

8 ответов:
принятое решение не работает для меня. Единственный способ заставить его работать, все еще имея возможность прокручивать:
html { overflow: hidden; height: 100%; } body { height: 100%; overflow: auto; }
один из способов предотвратить это, используя следующий CSS:
html, body { width: 100%; height: 100%; overflow: hidden; } body > div { height: 100%; overflow: scroll; -webkit-overflow-scrolling: touch; }таким образом, тело никогда не перелив и не "подпрыгивать" при прокрутке в верхней и нижней части страницы. Контейнер будет прекрасно прокручивать его содержимое внутри. Это работает в Safari и в Chrome.
Edit
зачем лишние
<div>- элемент в качестве обертки может быть полезен:
Флориан Feldhaus решением немного использует меньше кода и работает нормально тоже. Однако он может иметь небольшую причуду, когда речь заходит о содержании, которое превышает ширину видового экрана. В этом случае полоса прокрутки в нижней части окна перемещена из окна просмотра на полпути и не узнать/достать. Этого можно избежать с помощьюbody { margin: 0; }Если подходит. В ситуации, когда вы не можете добавить этот CSS, элемент оболочки полезен, поскольку полоса прокрутки всегда полностью видна.найти скриншот ниже:
В Chrome 63+, Firefox 59+ и Opera 50+ вы можете сделать это в CSS:
body { overscroll-behavior-y: none; }это отключает эффект резиновой полосы на iOS, показанный на скриншоте вопроса. Однако он также отключает pull-To-refresh, эффекты свечения и цепочку прокрутки.
однако вы можете выбрать, чтобы реализовать свой собственный эффект или функциональность при прокрутке. Если вы, например, хотите размыть страницу и добавить аккуратную анимацию:
<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+ поддерживают его. Край публично поддержал его, в то время как Safari неизвестен. Отслеживать прогресс здесь и текущая совместимость браузера в документация MDN
дополнительная информация
- Chrome 63 release video
- Chrome 63 release post - содержит ссылки и детали ко всему I писал выше.
overscroll-behaviorCSS spec- документация MDN
Вы можете использовать этот код, чтобы удалить
touchmoveпредопределенное действие:document.body.addEventListener('touchmove', function(event) { console.log(event.source); //if (event.source == document.body) event.preventDefault(); }, false);
position: absoluteработает для меня. Я проверил наChrome 50.0.2661.75 (64-bit)и OSX.body { overflow: hidden; } // position is important #element { position: absolute; top: 0; right: 0; bottom: 0; left: 0; overflow: auto; }
эффект отскока не может быть отключен, за исключением высота страницы равна
window.innerHeight, вы можете позволить вашим подэлементам прокручиваться.html { overflow: hidden; }

Comments