Я новый программист, просто пытающийся научиться делать веб-страницы. Я нашел код для увеличения и панорамирования элементов холста, но когда я внедрил его в окно extJS, он начал становиться вялым. Это не становится медлительным, если изображение, которое я визуализую, является только формой, только если это из образа файла. Сначала я думал, что я создавал экземпляры объектов снова и снова, но я попытался удалить объекты после использования и ничего не изменил. Почему мое масштабирование замедляется?Почему мой холст увеличивает масштаб/панораму.
Ext.onReady(function(){
Ext.define("w",{
width: 1000,
height: 750,
extend: "Ext.Window",
html: '<canvas id="myCanvas" width="1000" height="750">'
+ 'alternate content'
+ '</canvas>'
,afterRender: function() {
this.callParent(arguments);
var canvas= document.getElementById("myCanvas");
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
var stage = new createjs.Stage("myCanvas");
/*function addCircle(r,x,y){
var g=new createjs.Graphics().beginFill("#ff0000").drawCircle(0,0,r);
var s=new createjs.Shape(g)
s.x=x;
s.y=y;
stage.addChild(s);
stage.update();
}*///// If I use this function instead of loading an img there's no slowdown.
function setBG(){
var myImage = new Image();
myImage.src = "dbz.jpg";
myImage.onload = setBG;
var bgrd = new createjs.Bitmap(myImage);
stage.addChild(bgrd);
stage.update();
delete myImage;
delete bgrd;
};
setBG();
//addCircle(40,200,100);
//addCircle(50,400,400);
canvas.addEventListener("mousewheel", MouseWheelHandler, false);
canvas.addEventListener("DOMMouseScroll", MouseWheelHandler, false);
var zoom;
function MouseWheelHandler(e) {
if(Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)))>0)
zoom=1.1;
else
zoom=1/1.1;
stage.regX=stage.mouseX;
stage.regY=stage.mouseY;
stage.x=stage.mouseX;
stage.y=stage.mouseY;
stage.scaleX=stage.scaleY*=zoom;
stage.update();
delete zoom;
}
stage.addEventListener("stagemousedown", function(e) {
var offset={x:stage.x-e.stageX,y:stage.y-e.stageY};
stage.addEventListener("stagemousemove",function(ev) {
stage.x = ev.stageX+offset.x;
stage.y = ev.stageY+offset.y;
stage.update();
delete offset;
});
stage.addEventListener("stagemouseup", function(){
stage.removeAllEventListeners("stagemousemove");
});
});
} //end aferrender
}); //end define
Ext.create("w", {
autoShow: true });
}); //end onready
ohhh yeahh Теперь я вижу это спасибо ... но мне действительно не нужна myImage.onload = function() {do I? Я просто прокомментировал всю строку myimage.onload, и она работает достаточно хорошо. Есть ли причина ждать .onload? –
Единственная причина в том, что вам нужно было сделать что-то только ПОСЛЕ ПОСЛЕ завершения загрузки и готовности к работе. – Lochemage
Да, я обычно жду, пока изображение загрузится, прежде чем я попытаюсь отобразить его на экране, чтобы я мог либо сделать эффект (выцветать), либо использовать его в качестве листа спрайта и нарезать его. Вы используете createjs, поэтому имейте в виду, что они справляются со многими из этих ситуаций для вас. Также может быть полезно использовать информацию о загрузке, чтобы убедиться, что все не начинается, прежде чем вы будете готовы начать их ... в игре, например. – ericjbasti