Страницы

Поиск по вопросам

воскресенье, 29 марта 2020 г.

Сделать при scroll пунктирный <path> растущим

#javascript #jquery #css #svg #svg_animation


Ниже то, что я сделал до сих пор .

Это отлично работает, но я хочу сделать анимацию, которая немного сложнее для меня. 



// Получить идентификатор элемента  и длину 
var myline = document.getElementById("myline");
var length = myline.getTotalLength();
circle = document.getElementById("circle");
// Начальная позиция рисования
myline.style.strokeDasharray = length;

// Скройте треугольник, смещая черту. Удалите эту линию, чтобы показать треугольник
перед прокруткой
myline.style.strokeDashoffset = length;

// Найти процент прокрутки при scroll (используя свойства кросс-браузера) и сместить
тире настолько же, сколько и процент прокрутки
window.addEventListener("scroll", myFunction);

function myFunction() {
  // What % down is it?
  var scrollpercent = (document.body.scrollTop + document.documentElement.scrollTop)
/ (document.documentElement.scrollHeight - document.documentElement.clientHeight);
  // Длина offset до dashes
  var draw = length * scrollpercent;

  // Переверните рисование (при прокрутке вверх)
  myline.style.strokeDashoffset = length - draw;

  //получить точку в длине
  endPoint = myline.getPointAtLength(draw);
  circle.setAttribute("cx", endPoint.x);
  circle.setAttribute("cy", endPoint.y);

}
body {
  height: 2000px;
  background: #f1f1f1;
}

#circle {
  fill: red;
}

#mySVG {
  position: fixed;
  top: 15%;
  width: 100vw;
  height: 100vh;
  margin-left: -50px;
}

.st0 {
  fill: none;
  stroke-dashoffset: 3px;
  stroke: red;
  stroke-width: 5;
  stroke-miterlimit: 10;
  stroke-dasharray: 20;
}

Scroll down this window to draw my path.

Scroll back up to reverse the drawing.

Sorry, your browser does not support inline SVG. Мой вопрос: можем ли мы сделать линию пунктирной? Я знаю, что путь растет, используя strokeDasharray Но все же, есть ли способ достичь этого? Если нет, то, пожалуйста, предложите другой способ. Я не ищу - "разместить пунктирную линию над линией, которую вы хотите нарисовать, и придать ей цвет вашего фона".


Ответы

Ответ 1



Есть способ сделать это. Вы можете использовать пунктирную линию в качестве маски для анимированной линии. // Get the id of the element and the length of var myline = document.getElementById("myline"); var length = myline.getTotalLength(); circle = document.getElementById("circle"); // The start position of the drawing myline.style.strokeDasharray = length; // Hide the triangle by offsetting dash. Remove this line to show the triangle before scroll draw myline.style.strokeDashoffset = length; // Find scroll percentage on scroll (using cross-browser properties), and offset dash same amount as percentage scrolled window.addEventListener("scroll", myFunction); function myFunction() { // What % down is it? var scrollpercent = (document.body.scrollTop + document.documentElement.scrollTop) / (document.documentElement.scrollHeight - document.documentElement.clientHeight); // Length to offset the dashes var draw = length * scrollpercent; // Reverse the drawing (when scrolling upwards) myline.style.strokeDashoffset = length - draw; //get point at length endPoint = myline.getPointAtLength(draw); circle.setAttribute("cx", endPoint.x); circle.setAttribute("cy", endPoint.y); } body { height: 2000px; background: #f1f1f1; } #circle { fill: red; } #mySVG { position: fixed; top: 15%; width: 100vw; height: 100vh; margin-left: -50px; } .st0 { fill: none; stroke-dashoffset: 3px; stroke: red; stroke-width: 5; stroke-miterlimit: 10; stroke-dasharray: 20; } .mask-style { stroke: white; stroke-width: 7; }

Scroll down this window to draw my path.

Scroll back up to reverse the drawing.

Sorry, your browser does not support inline SVG. Источник

Комментариев нет:

Отправить комментарий