Предотвратить "overscrolling" веб-страницы



в Chrome для Mac, можно "overscroll" страницы (за неимением лучшего слова), как показано на скриншоте ниже, чтобы увидеть "что там за спиной", похож на iPad или iPhone.



Я заметил, что некоторые страницы отключены, например gmail и страница "новая вкладка".



Как я могу отключить "overscrolling"? Есть ли другие способы, с помощью которых я могу контролировать "overscrolling"?



enter image description here

736   8  

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, элемент оболочки полезен, поскольку полоса прокрутки всегда полностью видна.

найти скриншот ниже: enter image description here

В 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

дополнительная информация

попробуй так

body {
    height: 100vh;
    background-size: cover;
    overflow: hidden;
}

Вы можете использовать этот код, чтобы удалить touchmove предопределенное действие:

document.body.addEventListener('touchmove', function(event) {
  console.log(event.source);
  //if (event.source == document.body)
    event.preventDefault();
}, false);
html,body {
    width: 100%;
    height: 100%;
}
body {
    position: fixed;
    overflow: hidden;
}

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

    Ничего не найдено.