Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.08.2019, 13:14
Аватар для Максим Ученик
Интересующийся
Отправить личное сообщение для Максим Ученик Посмотреть профиль Найти все сообщения от Максим Ученик
 
Регистрация: 13.08.2019
Сообщений: 25

Как анимировать/двигать SVG ?
Я хочу научится анимировать SVG.
Для этого я нарисовал в inkscape контур :
codepen.io/pen на котором изображена машина и кривая с точками.

Как можно при onclick на эти точки сделать так что бы машина ехала ?
Если можно подробный ответ ..я хочу что бы дошло как это делается
Ответить с цитированием
  #2 (permalink)  
Старый 13.08.2019, 14:14
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Максим Ученик,
svg движение по траектории
Ответить с цитированием
  #3 (permalink)  
Старый 13.08.2019, 14:16
Аватар для Максим Ученик
Интересующийся
Отправить личное сообщение для Максим Ученик Посмотреть профиль Найти все сообщения от Максим Ученик
 
Регистрация: 13.08.2019
Сообщений: 25

Сообщение от рони Посмотреть сообщение
Максим Ученик,
svg движение по траектории
я видел это, но как привязать к своему SVG не знаю и к тому же я так понял что тот кто задал вопрос сам не шарит
Ответить с цитированием
  #4 (permalink)  
Старый 13.08.2019, 14:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Максим Ученик,
тут есть код, выше ссылка немного не та.
Анимация-движения-объекта-по-траектории-графика-со-сглаженными-линиями
Ответить с цитированием
  #5 (permalink)  
Старый 13.08.2019, 14:41
Аватар для Максим Ученик
Интересующийся
Отправить личное сообщение для Максим Ученик Посмотреть профиль Найти все сообщения от Максим Ученик
 
Регистрация: 13.08.2019
Сообщений: 25

Сообщение от рони Посмотреть сообщение
Максим Ученик,
тут есть код, выше ссылка немного не та.
Анимация-движения-объекта-по-траектории-графика-со-сглаженными-линиями
а вы можете показать как тот js привязать к моему svg ?
Ответить с цитированием
  #6 (permalink)  
Старый 13.08.2019, 17:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от Максим Ученик
а вы можете показать как тот js привязать к моему svg ?
как заменить корабль на ваш автомобиль не знаю, я в курсе про атрибут d.
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  #ship {
      fill: #f00;
  }
  circle {
      cursor: pointer;
      fill: #0f0;
      stroke-width: 0;
  }
  circle.active {
      fill: #e53326;
      stroke: #e53326;
      stroke-width: 3px;
  }
  </style>

</head>

<body>
<svg viewBox="0 87 297 210" xmlns="http://www.w3.org/2000/svg" id="svg">
  <path id="track" d="m49.400055 146.13617s23.854965-43.03965 42.873513-37.93835c44.256412 11.87077-9.097773 106.24714 32.851512 123.85504 27.45974 11.52601 51.42221-45.95609 80.42507-38.29061 34.81807 9.20245 55.48565 86.15137 55.48565 86.15137" fill="none" stroke="#000" stroke-width=".30px"></path>
  <path id="ship" d="m-10,-5l-10,-10l15,3l5,-10l5,10l15,-3l-10,10z"></path>
</svg>
<script>
let count = 5,
    len = track.getTotalLength(),
    seg = len / (count - 1),
    pos = 0,
    target = 0;

svg.innerHTML += Array(count).fill(0).map((e, i) => {
  let len = seg * i, p = track.getPointAtLength(len);
  return "  <circle data-len="+len+" r=6 cx="+p.x+" cy="+p.y+" class"+(i?'':'=active')+"></circle>"
}).join('');

render();

function render() {
  let dp = target - pos;
  pos += Math.abs(dp) < 1 ? 0 : Math.sign(dp);
  let p1 = track.getPointAtLength(pos),
      p2 = track.getPointAtLength(pos + 1),
      a = Math.atan2(p2.y - p1.y, p2.x - p1.x) * 180 / Math.PI;
      ship.setAttribute("transform", "translate("+p1.x+","+p1.y+") rotate("+a+")");
  requestAnimationFrame(render)
}

let circles = document.querySelectorAll('circle');
circles.forEach(c => c.onclick = e => {
  circles.forEach(c1 => c1.classList.toggle('active', c===c1))
  target = +c.dataset.len;
});
</script>
</body>
</html>
Ответить с цитированием
  #7 (permalink)  
Старый 13.08.2019, 17:30
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

Цитата:
а вы можете показать как тот js привязать к моему svg ?
SVG это текстовое описание векторной графики т.е. грубо говоря инструкция компьютеру как рисовать изображение из каких элементов и как их расположить.
Инструкция эта текстовая для того чтобы человекам было удобно ее писать и читать.
Однако компьютеру не удобно работать с текстом ему удобно работать с конкретными байтами в конкретных ячейках памяти.
По этому компьютер парсит документ SVG и на основании него строит DOM объектную модель документа ( по сути это древовидная структура которая хранит ссылки на конкретные данные в памяти ).

JS не привязывается к SVG он работает с DOM (объектной моделью документа) т.е. может получать и изменять свойства этой модели и использовать методы.

Небольшой пример что бы наглядно увидеть объектную модель SVG элемента.
В браузере хром на странице с твоим примером кликни правой кнопкой мыши на красной машинке и выбери «посмотреть код»
откроется окно с отладчиком и в этом окне на вкладке консоль можно выполнить код
var SVG_elem = document.body.children[0]; 
console.dir (SVG_elem ); // DOM
console.dir (SVG_elem .children); // массив корневых объектов 
//Ну а дальше все должно быть понятно
SVG_elem .children[2].onclick = function(){
    SVG_elem .children[1].setAttribute('transform','translate(20,10)')
};
// Можно кликнуть на первый зеленый круг

Консоль удобна для того чтобы наглядно все увидеть.

Последний раз редактировалось MallSerg, 13.08.2019 в 17:33.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JSON как хранить как парсить jay-S Общие вопросы Javascript 1 26.05.2017 07:50
svg - как включить текст к rect, circle и т.п.? eugen35 (X)HTML/CSS 0 25.08.2014 20:28
Мотоциклисты есть? l-liava-l Оффтопик 13 04.07.2014 13:35
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как сделать как в JQ? faforty Общие вопросы Javascript 8 14.11.2011 01:35