CSS Snap scroll не работает при загрузке страницы в Chrome

Я кодирую веб-сайт (с ajaxify.js и history.js), который включает разные <section> с вертикальной прокруткой с шириной и высотой на 100% экрана (на моей домашней странице и на другой странице).

Чтобы сделать навигацию немного удобнее, я использую новую функцию CSS snap scroll. Он отлично работает в Safari (v.12), Firefox (v.62). Но с Chrome (v.69) действительно глючит.

Действительно, когда моя домашняя страница загружается в Chrome, эффект привязки не работает. Итак, я иду проверить на другой странице, имеющей эффект, он все еще не работает ... но если я вернусь, чтобы посетить свою домашнюю страницу (без перезагрузки сайта, потому что он в Ajax), эффект привязки сработает!

Я применяю класс «snap» к тегу <body> (как контейнер прокрутки) и класс «snap-section» к <section>.

Вот мой CSS для <body:

body {
  width: 100vw;
  overflow-y: scroll;

  -webkit-scroll-snap-type: mandatory;
    -ms-scroll-snap-type: mandatory;
      scroll-snap-type: mandatory;

  -webkit-scroll-snap-points-y: repeat(100vh);
    -ms-scroll-snap-points-y: repeat(100vh);
      scroll-snap-points-y: repeat(100vh);

  -webkit-scroll-snap-type: y mandatory;
    -ms-scroll-snap-type: y mandatory;
      scroll-snap-type: y mandatory;
}

CSS для каждого <section>:

section.snap-section {
  position: relative;
  width: 100vw;
  height: 100vh;

  scroll-snap-align: start !important;
}

Эта ошибка сводит меня с ума ... Я пробовал все, например, удаление Ajax, но он все равно терпит неудачу. Спасибо за вашу помощь!

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
2
0
1 283
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я столкнулся с той же проблемой.

Нашел обходной путь, не применяя свойство "тип привязки" до тех пор, пока страница не загрузится с помощью jquery. Раздражает делать это таким образом, но работает.

Попробуйте следующее:

$('body').addClass('scroll-snap');
body {
  width: 100vw;
  overflow-y: scroll;
}
.scroll-snap {
  -webkit-scroll-snap-type: mandatory;
    -ms-scroll-snap-type: mandatory;
      scroll-snap-type: mandatory;

  -webkit-scroll-snap-points-y: repeat(100vh);
    -ms-scroll-snap-points-y: repeat(100vh);
      scroll-snap-points-y: repeat(100vh);

  -webkit-scroll-snap-type: y mandatory;
    -ms-scroll-snap-type: y mandatory;
      scroll-snap-type: y mandatory;
}

section.snap-section {
  position: relative;
  width: 100vw;
  height: 100vh;
  
/* you can lose the !important */
  scroll-snap-align: start;
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
<section class = "snap-section" style = "background-color:orange">
</section>
<section class = "snap-section" style = "background-color:yellow">
</section>
<section class = "snap-section" style = "background-color:red">
</section>
<section class = "snap-section" style = "background-color:blue">
</section>
</body>

Спасибо за Ваш ответ. Я попробовал ваше решение: если я сначала загружаю страницу в Chrome (ничего не в кеше), она не работает, но когда я обновляю страницу, она работает.

Mathieu Préaud 07.11.2018 18:31

Я не могу сравнивать яблоки с яблоками, так как я использую chrome v 70.0.3538.77 - НО я могу сказать вам, что он работает с полностью очищенным кешем. Проверено на Chrome на ПК и Mac. Где вы запускаете сценарий? Убедитесь, что он запущен после загрузки страницы.

davevsdave 08.11.2018 00:51

Я так понимаю, я не тестировал на ПК только на Mac. Веб-сайт, который я разрабатываю, - это Wordpress, поэтому я запускаю сценарий в нижнем колонтитуле (с файлом JS). У меня было время ожидания 2 секунды перед применением класса, и, похоже, он работает. Спасибо!

Mathieu Préaud 09.11.2018 10:52

Другие вопросы по теме