我嘗試使用EaselJS動態生成畫布時出現問題。(EaselJS,HTML Canvas,Stage)Uncaught InvalidStateError:試圖使用不可用或不再可用的對象
我正在開發類似的東西:
[1] http://acuradoria.com/ilustration1.jpg
的ilustration是由兩個不同的圖像組成。用戶將能夠調整大小並移動背景圖像。當用戶點擊不同的選項卡時,疊加圖像會發生變化。
這裏是JavaScript:
<script type="text/javascript">
var tamanho;
var offsetX;
var offsetY;
var rotation;
var slideInterval = -1;
function init() {
console.log('iniating');
console.log('Settings sliders');
$(".tamanhoSlider").slider({
value: 50,
min: 1,
max: 100,
disabled:false,
change:handleChange,
slide: handleSlide
});
$(".offsetHorizontalSlider").slider({
value: 0,
min: -300,
max: 300,
disabled:false,
change:handleChange,
slide: handleSlide
});
$(".offsetVerticalSlider").slider({
value: 0,
min: -300,
max: 300,
disabled:false,
change:handleChange,
slide: handleSlide
});
$(".rotationSlider").slider({
value: 0,
min: -180,
max: 180,
disabled:false,
change:handleChange,
slide: handleSlide
});
$("#resetBtn").click(resetButtons);
canvas = document.getElementById("testCanvas");
stage = new createjs.Stage(canvas);
img = new Image();
img.onload = displayImage();
img.src = "<? echo $thumb->path; ?>";
midiaImage = new Image();
midiaImage.src = "<? echo $midiaPath; ?>";
midiaImage.onload = displayMidia();
}
function handleSlide() {
if (slideInterval == -1) {
slideInterval = setInterval(applyEffect, 250);
}
}
function handleChange() {
clearInterval(slideInterval);
slideInterval = -1;
updateImage();
}
function updateImage(stage) {
stage.getChildByName('bmp').x = ($(".offsetHorizontalSlider").slider("option", "value")) + 200;
stage.getChildByName('bmp').y = ($(".offsetVerticalSlider").slider("option", "value")) + 200;
stage.getChildByName('bmp').scaleX = $(".tamanhoSlider").slider("option", "value")/100;
stage.getChildByName('bmp').scaleY = $(".tamanhoSlider").slider("option", "value")/ 100;
stage.getChildByName('bmp').rotation = $(".rotationSlider").slider("option", "value");
stage.getChildByName('bmp').regX = bmp.image.naturalWidth/2;
stage.getChildByName('bmp').regY = bmp.image.naturalHeight /2;
stage.update();
console.log('Image updated', stage);
}
function resetButtons(){
$(".offsetHorizontalSlider").slider("option", "value", 0);
$(".offsetVerticalSlider").slider("option", "value", 0);
$(".tamanhoSlider").slider("option", "value", 50);
$(".rotationSlider").slider("option", "value", 0);
updateImage();
}
exportAndSaveCanvas = function() {
// Get the canvas screenshot as PNG
var screenshot = Canvas2Image.saveAsPNG(canvas, true);
// This is a little trick to get the SRC attribute from the generated <img> screenshot
canvas.parentNode.appendChild(screenshot);
screenshot.id = "canvasimage";
data = $('#canvasimage').attr('src');
canvas.parentNode.removeChild(screenshot);
// Send the screenshot to PHP to save it on the server
var url = '/includes/procedural/saveThumb.php';
$.ajax({
type: "POST",
url: url,
dataType: 'text',
data: {
base64data : data
}
});
}
displayImage = function() {
console.log('Handling image load');
bmp = new createjs.Bitmap(img);
bmp.name = 'bmp';
bmp.scaleX = bmp.scaleY = 0.4;
bmp.cache(0,0,img.width,img.height);
stage.addChild(bmp);
stage.update();
}
displayMidia = function(){
midia = new createjs.Bitmap(midiaImage);
var MAX_WIDTH = 400;
var MAX_HEIGHT = 400;
var scale = 1;
var width = $(midiaImage).get(0).width;
var height = $(midiaImage).get(0).height;
if (width > height) {
if (width > MAX_WIDTH)
{
scale = MAX_WIDTH/width;
height *= MAX_WIDTH/width;
width = MAX_WIDTH;
}
}
else
{
if (height > MAX_HEIGHT)
{
scale = MAX_HEIGHT/height;
width *= MAX_HEIGHT/height;
height = MAX_HEIGHT;
}
}
midia.scaleX = scale;
midia.scaleY = scale;
stage.addChild(midia);
stage.update();
}
</script>
,我發現了以下錯誤: [2] http://acuradoria.com/ilustration2.jpg
看起來,我想要使用的東西是不存在了。 儘管如此,我無法確定它是什麼。 = {
請幫忙。
我沒有看到你將img定義爲全局變量的那一行 - 它只是在你的代碼中丟失了,或者你沒有嗎?如果是這樣,那麼這可能是問題 - 我沒有進一步調查你的任何進一步;) – olsn
我發現了這個問題。它與緩存有關......儘管如此,我指出了全局變量。 Thnx –
請注意,此行將運行您的函數,而不是將其指定爲回調函數:'midiaImage.onload = displayMidia();'。相反,我們'midiaImage.onload = displayMidia;'(無括號)。 – Lanny