0

私は Web ページの作成方法を学ぼうとしている新しいプログラマーです。キャンバス要素をズームおよびパンするコードを見つけましたが、それを 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
4

2 に答える 2

2

BG 画像を無限に再読み込みしているようです。BG 画像の読み込みが完了すると、onload 関数のコールバックによって getBG が再度呼び出され、同じプロセスが永遠に繰り返されます。

function setBG() {
  ...
  myImage.onload = setBG;
  ...
}

これを行うことであなたが何を期待しているのか正確にはわかりません。

于 2013-07-24T18:01:59.160 に答える