Здравствуйте,
пример:
ограничиваем холст шестиугольником
ctx.save();
ctx.translate(x+2*heightX,y);
ctx.beginPath();
ctx.moveTo(0-2*heightX,0);
ctx.lineTo(0-heightX,0-heightY);
ctx.lineTo(heightX,0-heightY);
ctx.lineTo(2*heightX,0);
ctx.lineTo(heightX,heightY);
ctx.lineTo(0-heightX,heightY);
ctx.closePath();
ctx.clip();
добавляем градиент
var gr = ctx.createRadialGradient(0,heightY,15,0,0,25);
gr.addColorStop(0.0,'#0F0');
gr.addColorStop(1.0,'#0DA805');
ctx.fillStyle = gr;
рисуем площадь, ограниченную кривой Безье
ctx.moveTo(0-heightX,0+heightY);
ctx.bezierCurveTo((0-heightX)-f3,(0+heightY)-f4,heightX+f3,(0+heightY)-f4,heightX,0+heightY);
ctx.closePath();
ctx.fill();
всё вроде бы просто, но в IE+FF этот код выполняется в 10-20 раз медленнее, чем в Chrome.
Можно или как нибудь это оптимизировать? Буффер вроде бы не подходит, т.к. много цветов+фигуру надо «вертеть»
RadialGradient: если один из радиусов градиента выходит за границы холста, то ФФ и ИЕ градиент не рисуют вообще. можно ли это как-то обойти?
пример здесь:
dino.fornax.uberspace.de/test/