#javascript #html #canvas
#javascript #HTML #холст
Вопрос:
Я пытаюсь создать эффект «starburst», используя canvas, но линии сегмента выглядят невероятно пикселизированными. Я делаю что-то не так?
var rays = 40;
var canvas = $("header canvas")[0];
var ctx = canvas.getContext("2d");
var centre = [canvas.width*0.2,canvas.height*0.90];
var radius = Math.sqrt(Math.pow(canvas.width,2) Math.pow(canvas.height,2));
var colours = ["red","white"];
var segment = 2*Math.PI/rays;
for(var i=0;i<rays;i ){
ctx.beginPath();
ctx.moveTo(centre[0], centre[1]);
ctx.arc(
centre[0],
centre[1],
radius,
segment * i,
segment * (i 1),
false
);
ctx.lineTo(centre[0], centre[1]);
ctx.closePath();
ctx.fillStyle = colours[i % colours.length];
ctx.fill();
}
Комментарии:
1. Каков размер холста? Мне это кажется довольно приятным. P.S. результат нравится.
2. В каких браузерах вы это пробуете? Я знаю, что webkit обычно использует псевдонимы по умолчанию.
Ответ №1:
Я бы предложил использовать векторную графику (т. Е. SVG) вместо canvas. Это устранит ваши проблемы с неровными линиями.
Более конкретно, если вы используете библиотеку Javascript Raphael, ваш код может быть практически таким же.
Дополнительным бонусом является то, что Raphael также работает в более старых версиях IE, поскольку он может обнаруживать и переключаться на использование VML, если SVG недоступен.
Ответ №2:
Сглаживание выполняется браузером. Прямо сейчас ваш код будет отлично смотреться в Firefox 4 и IE9, но плохо в браузерах webkit.
В том, как chrome / safari делают это, вот так, есть плюсы, которые будут хорошо смотреться в chrome, но плохо в Firefox 4.
Люди попросили автора спецификации использовать логическое значение, управляющее сглаживанием, и он был против этой идеи.
Комментарии:
1. да, только что попробовал в последней версии Chrome 10.0.648.205, все выглядит нормально.
2. Алнитак, эта скрипка в Chrome 12 выглядит ужасно по сравнению с FF4. Слева = Firefox, справа = Chrome: i.imgur.com/MqvTa.png
3. странно — это идеально подходит для Chrome 10 и macOS X.