Не работает анимация при скроле к нужному блоку, как исправить?

Ссылка скопирована
10 февраля 2026 1 ответ

Помогите испрать код, чтобы анимация SVG заработала тогда, когда при прокрутке страницы дойдет очередь до этого картинки svg. Т.е. когда пользователь проскролит до нужного блока, где находиться этот рисунок, то тогда только он появиться с анимацией.
Мой код такой:

<!DOCTYPE html> <html> <head>   <title>SVG Animation on Scroll</title>   <style>     body {       margin: 0;       width: 900px;     }     svg {       /*visibility: hidden;  Скрыть SVG изначально */       display:none;     }   </style> </head> <body>  <h2>Lorem Ipsum</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>   <div id="anim1"> <svg width="54" height="54" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" version="1.1">  <g class="layer">   <title>Layer 1</title>   <g id="surface1">    <path d="m2.08,51.95l51.2,0" fill="none" id="svg_1" stroke="rgb(0%,0%,0%)" stroke-miterlimit="4" stroke-width="3"/>    <path d="m2.08,0.82l0,51.13" fill="none" id="svg_2" stroke="rgb(0%,0%,0%)" stroke-miterlimit="4" stroke-width="3"/>    <path d="m2.08,51.95l12.8,-25.57l12.8,10.23l12.8,-20.45l10.24,-5.11" fill="none" id="svg_3" stroke="rgb(0%,0%,0%)" stroke-miterlimit="4" stroke-width="3"/>      <line fill="none" id="svg_10" stroke="#000000" stroke-width="3" x1="39.22" x2="49.2" y1="8.09" y2="11.16"/>   <line fill="none" id="svg_13" stroke="#000000" stroke-width="3" x1="44.83" x2="49.73" y1="21.29" y2="11.91"/>   <ellipse cx="14.57" cy="25.31" fill="none" id="svg_14" rx="6" ry="6" stroke="#000000" stroke-width="2"/> </g>  <!-- Анимация обводки -->  <animate attributeName="stroke-dasharray" from="0 54" to="54 0" dur="2s" begin="0s" repeatCount="1" />  </g> </svg> </div>    <script>     const svg = document.querySelector('svg');     const animation = document.getElementById('animation');      function isElementInViewport(el) {       const rect = el.getBoundingClientRect();       return (         rect.top >= 0 &&         rect.left >= 0 &&         rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&         rect.right <= (window.innerWidth || document.documentElement.clientWidth)       );     }      function checkAnimation() {       if (isElementInViewport(svg)) {         svg.style.display = 'block'; // Показать SVG         animation.beginElement(); // Запустить анимацию         window.removeEventListener('scroll', checkAnimation); // Убрать слушатель после первого запуска       }     }      window.addEventListener('scroll', checkAnimation);   </script> </body> </html>

<!DOCTYPE html> <html> <head> <title>SVG Animation on Scroll</title> <style> body { margin: 0; width: 900px; } svg { /*visibility: hidden; Скрыть SVG изначально */ display:none; } </style> </head> <body> <h2>Lorem Ipsum</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div id="anim1"> <svg width="54" height="54" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" version="1.1"> <g class="layer"> <title>Layer 1</title> <g id="surface1"> <path d="m2.08,51.95l51.2,0" fill="none" id="svg_1" stroke="rgb(0%,0%,0%)" stroke-miterlimit="4" stroke-width="3"/> <path d="m2.08,0.82l0,51.13" fill="none" id="svg_2" stroke="rgb(0%,0%,0%)" stroke-miterlimit="4" stroke-width="3"/> <path d="m2.08,51.95l12.8,-25.57l12.8,10.23l12.8,-20.45l10.24,-5.11" fill="none" id="svg_3" stroke="rgb(0%,0%,0%)" stroke-miterlimit="4" stroke-width="3"/> <line fill="none" id="svg_10" stroke="#000000" stroke-width="3" x1="39.22" x2="49.2" y1="8.09" y2="11.16"/> <line fill="none" id="svg_13" stroke="#000000" stroke-width="3" x1="44.83" x2="49.73" y1="21.29" y2="11.91"/> <ellipse cx="14.57" cy="25.31" fill="none" id="svg_14" rx="6" ry="6" stroke="#000000" stroke-width="2"/> </g> <!-- Анимация обводки --> <animate attributeName="stroke-dasharray" from="0 54" to="54 0" dur="2s" begin="0s" repeatCount="1" /> </g> </svg> </div> <script> const svg = document.querySelector('svg'); const animation = document.getElementById('animation'); function isElementInViewport(el) { const rect = el.getBoundingClientRect(); return ( rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth) ); } function checkAnimation() { if (isElementInViewport(svg)) { svg.style.display = 'block'; // Показать SVG animation.beginElement(); // Запустить анимацию window.removeEventListener('scroll', checkAnimation); // Убрать слушатель после первого запуска } } window.addEventListener('scroll', checkAnimation); </script> </body> </html>

Дополнительно:

На данный момент SVG картинка все равно сразу появляется и анимируется.

лучше применить Intersection Observer API
и заменить код на этот

const options = {   root: null,   rootMargin: '0px',   threshold: 1.0 } const svg = document.querySelector('svg') const animation = document.getElementById('animate') const observer = new IntersectionObserver((entries, observer) => {   entries.forEach((entry) => {     if (entry.isIntersecting) {       animation.beginElement()       svg.style.display = 'block'     }   }) }, options) observer.observe(document.querySelector('#anim1'))

const options = { root: null, rootMargin: '0px', threshold: 1.0 } const svg = document.querySelector('svg') const animation = document.getElementById('animate') const observer = new IntersectionObserver((entries, observer) => { entries.forEach((entry) => { if (entry.isIntersecting) { animation.beginElement() svg.style.display = 'block' } }) }, options) observer.observe(document.querySelector('#anim1'))

<animate id="animate" .../>

посмотреть на codepen

  • уже применил, и да это работает
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Артём Dev Ответ

Для того чтобы исправить проблему с отсутствием анимации при скролле к нужному блоку, вам необходимо использовать JavaScript и CSS. Вот пример того, как можно реализовать анимацию при скролле на странице:

1. Добавьте атрибут data-scroll к элементу, к которому вы хотите прокрутить страницу с анимацией. Например:

```html

Прокрутить к блоку с id="target"

```

2. Напишите следующий JavaScript код:

```html

document.querySelectorAll('[data-scroll]').forEach(item => {
item.addEventListener('click', function() {
const target = document.querySelector(this.getAttribute('data-scroll'));
target.scrollIntoView({
behavior: 'smooth'
});
});
});

```

3. Добавьте следующий CSS код для плавной анимации:

```html

html {
scroll-behavior: smooth;
}

```

Теперь, когда пользователь кликает на элемент с атрибутом data-scroll, страница будет плавно прокручиваться к указанному элементу.

Убедитесь, что ваш HTML-код и CSS-стили правильно подключены, и JavaScript код находится внутри тега в вашем HTML-документе. Также убедитесь, что все селекторы и атрибуты правильно указаны в вашем коде.

Этот способ позволит вам добавить анимацию при скролле к нужному блоку на вашем сайте. Надеюсь, это поможет вам решить проблему!

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно