Анимация прорисовки линии на Raphael
Здравствуйте уважаемые форумчане! Сейчас делаю проект к котором нужно реализовать прорисовку линий на рафаэле. Т.е суть такова что бы в поле рисовались разные линии от прямых до безье и т.п. Я это реализовал ниже привожу код который я написал для прорисовки одной линии
var r = Raphael(0, 0, width_window, height_window); var p = r.path('M0 0 2000 0').attr("stroke","none"); var p2 = r.path("M0 541").attr({ "stroke-width": 2, "stroke": "#009dce" }); var e = r.ellipse(0, 541, 4, 4).attr("stroke","none"); e.animateAlong(p, 3000, true).onAnimation(function() { p2.attr("path", p2.attr("path").concat([["L", e.attr("cx"), e.attr("cy")]])); }); Код рабочий линии прорисовываются НО 1. В ИЕ (иногда хром) линии в местах скругления становятся ломанными. 2. Все жутко тормозит во всех браузерах Подскажите как мне быть с моими проблемами что сделать может кто то сможет подсказать другой вариант рисований линии?? Помогите пожалуйста! |
а просто в канвасе без рафаеля не пробовали нарисовать?
|
vadim5june,
а можете подсказать как на канвасе такое сделать? Привести примеры |
Вот здесь на английском языке про канвас
https://developer.mozilla.org/en-US/...anvas_tutorial вот здесь конкреьно линии круги кривые Безье https://developer.mozilla.org/ru/doc...Drawing_shapes где то у них же есть и на русском события не поддерживаются рафаэль работает с канвасом и SVG |
Так написал кое что другое стало работать намного лучше и быстрее но в ие8 анимации нет в ие9++ анимация есть. Вот код скажите пожалуйста почему не работает анимация в ие
$(function() { animateLine = function(canvas, colorNumber, pathString) { var line = canvas.path(pathString).attr({ stroke: colorNumber }); var length = line.getTotalLength(); $('path[fill*="none"]').animate({ 'to': 1 }, { duration: 3000, step: function(pos, fx) { var offset = length * fx.pos; var subpath = line.getSubpath(0, offset); canvas.clear(); canvas.path(subpath).attr({ stroke: colorNumber }); }, }); }; var width_window = $(window).width(), height_window = $(window).height(), pathString = "m 37.142857,169.50504 c 0,0 185.714283,-91.428572 218.571433,-57.14286 32.85714,34.28572 68.57142,120 68.57142,120"; var canvas = Raphael('canvas', width_window, height_window); animateLine(canvas, "#000", pathString); }); |
в ie8 канвас не поддерживается возможно рафаедь должен иммитировать или заменять на SVG
есть гугловская библиотека excanvas.js. для ie =правда я с ней не работал |
ексканвас подключал ничего не изменилось(
|
Вложений: 1
Если еще актуально - попробуйте вот так.
Работает в том числе и в IE8. Суть этого способа в добавлении к элементам "path" нового атрибута "length" с последующей его анимацией: window.onload = function(){ var paper = Raphael(document.getElementById("holder"), "100%", "100%"); var p1 = "M38 27c14,83 82,173 184,114 102,-60 -97,-44 -73,-82 25,-37 196,-37 259,-1 63,36 64,63 64,63", p2 = "M23 157c0,-42 -34,-135 102,-118 136,17 -34,89 -22,128 12,39 87,51 225,-8 137,-58 51,-81 -27,-97 -77,-17 -143,28 -110,67 34,38 279,35 279,35", line1, line2; // для элементов "path" добавляем новый атрибут "length", который может быть от 0 до getTotalLength // кроме того в каждом элементе "path" в параметре data("total-length") будет указана его длина, которая может понадобиться для анимации атрибута "length" paper.customAttributes.length = function (value) { if (!this.data("full-path")) { this.data("full-path", this.attrs.path) }; if (!this.data("total-length")) { this.data("total-length", Raphael.getTotalLength(this.data("full-path"))) }; return { path: Raphael.getSubpath(this.data("full-path"), 0, value) } }; // при загрузке страницы задаем нулевую длину для обеих линий line1 = paper.path(p1).attr({"length": 0}); line2 = paper.path(p2).attr({"length": 0}); document.getElementById("draw").onclick = function(){ line1.animate({ "length": line1.data("total-length"), "stroke": "red", "stroke-width": 10 }, 1000); line2.animate({ "length": line2.data("total-length"), "stroke": "green", "stroke-width": 5 }, 2000); }; }; архив прикрепляю, посмотреть в работе можно тут: http://jsfiddle.net/yncwpry1/1/ |
Часовой пояс GMT +3, время: 11:34. |