Показать сообщение отдельно
  #2 (permalink)  
Старый 07.07.2017, 19:00
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 456

Negotiant,
<canvas></canvas>
<script>
function SVGPath(path) {
	this.path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
	this.path.setAttribute('d', path);
	this.length = this.path.getTotalLength();
}
SVGPath.prototype.follow = function(duration, onprogress) {
	var path = this.path, length = this.length, start = performance.now();
	requestAnimationFrame(function step(now) {
		var progress = (now - start) / duration;
		if (progress > 1) progress = 1;
		onprogress(path.getPointAtLength(length * progress));
		if (progress < 1) requestAnimationFrame(step);
	});
};

var ctx = document.querySelector('canvas').getContext('2d');

var route = new SVGPath('M10 80 Q 52.5 10, 95 80 T 180 80');

route.follow(10000, function(point) {
	ctx.clearRect(0, 0, 300, 150);
	ctx.beginPath();
	ctx.arc(point.x, point.y, 10, 0, 2 * Math.PI);
	ctx.fill();
});
</script>

Последний раз редактировалось Rise, 07.07.2017 в 19:02.
Ответить с цитированием