Я организовал мой jCanvas код в метод визуализации, который выстреливает на window.resize:jCanvas по-видимому, не работать со слоями
<script type="text/javascript">
var middleX;
var middleY;
var canvas;
var ctx;
var isLoaded = false;
$(document).ready
(
function()
{
init();
isLoaded = true;
render();
$("canvas").fadeIn(2000);
}
);
function scaleToWindowDimensions()
{
ctx.canvas.width = window.innerWidth;
ctx.canvas.height = window.innerHeight;
middleX = $canvas.width()/2;
middleY = $canvas.height()/2;
}
function init()
{
$canvas = $('canvas');
ctx = document.getElementById("canvas").getContext("2d");
scaleToWindowDimensions();
}
$(window).resize
(
function()
{
scaleToWindowDimensions();
render();
}
);
function render()
{
if (!isLoaded)
{
return;
}
$canvas.clearCanvas();
// ctx.clearRect(0, 0, $canvas.width(), $canvas.height());
$canvas.addLayer({
method: 'drawArc',
strokeStyle: "#000",
strokeWidth: 1,
fillStyle: '#c33',
x: middleX,
y: middleY,
closed: true,
radius: 50,
// Event bindings
mousedown: function (target)
{
alert('You pushed RED!');
},
mouseup: function (target)
{
target.fillStyle = '#c33';
},
mouseover: function (target)
{
target.fillStyle = "#888";
},
mouseout: function (target)
{
target.fillStyle = "#c33";
}
});
$canvas.addLayer({
method: "drawText",
strokeStyle: "#000",
fromCenter: true,
strokeWidth: 1,
fillStyle: "#333",
fontSize: "18pt",
fontFamily: "Verdana",
x: middleX,
y: middleY,
text: "Man",
data: { "id": 1, "word": "Man" },
mousedown: function (target)
{
alert($(this).id);
}
});
$canvas.addLayer({
method: 'drawArc',
strokeStyle: "#000",
strokeWidth: 1,
fillStyle: '#d88',
x: 500,
y: 100,
closed: true,
radius: 40,
// Event bindings
mousedown: function (target)
{
alert('You pushed RED!');
target.fillStyle = '#333';
},
mouseup: function (target)
{
target.fillStyle = '#d88';
},
mouseover: function (target)
{
target.fillStyle = "#888";
},
mouseout: function (target)
{
target.fillStyle = "#d88";
}
});
$canvas.addLayer({
method: "drawText",
strokeStyle: "#000",
fromCenter: true,
strokeWidth: 1,
fillStyle: "#333",
fontSize: "16pt",
fontFamily: "Verdana",
x: 500,
y: 100,
text: "Men",
data: { "id": 2, "word": "Men" },
mousedown: function (target)
{
alert($(this).id);
}
});
$canvas.addLayer({
method: 'drawLine',
strokeStyle: "#222",
strokeWidth: 1,
x1: middleX,
y1: middleY,
x2: 500,
y2: 100,
radius: 40,
});
$canvas.drawLayers();
}
</script>
Это рисует этот образ:
Целью является первый шаг, когда рендер вызывается для очистки всего полотна:
$canvas.clearCanvas();
// ctx.clearRect(0, 0, $canvas.width(), $canvas.height());
Это две отдельные попытки очистить полотно, ни одно из которых не работает. Без холста очищаются, результат таков:
У меня есть общее представление о том, что это имеет что-то делать со слоями, а не рисовать непосредственно, но я озадачен, почему холст не является очищено ...
TIA.
Это имеет смысл ... просто так я понимаю теоретическую проблему, что не так с моим ожиданием, что clearCanvas очистит существующие слои? –
'clearCanvas' по существу используется для очистки всего или части холста. Слои - это просто объекты, которые облегчают поведение слоя, но не расширяют фактическое полотно выше, чем оно есть, - «немой» пиксельный массив. 'clearCanvas' очищает то, что * было нарисовано * на этом« немом »пиксельном массиве, но не добавлены фактические объекты слоя. Таким образом, любой вызов 'drawLayers' будет выполнять итерацию по всем объектам слоя, если они были добавлены, и нарисовать их по порядку в этом массиве пикселей. Вы можете попробовать в своем примере вызвать 'render' один раз, слои и все, а затем' clearCanvas'. – Rikonator