2017-11-10 12 views
0

自分のJavaScriptオブジェクトインスタンスが自分のイベントを処理したいと思っています。私はそれをこのように構造化しました。純粋なJavaScriptオブジェクト(非DOM)でKeypressイベントシステムを行う方法

class Player{ 
constructor(length=2) 
{ 
    this.length=length; 
    this.plHead = new PlayerHead(5,5,"#AA0000"); 
    this.plBody = new PlayerBody(this.plHead.posX,this.plHead.posY, this.length); 
    this.plDir = "xAx"; 
    this.plSpeed =0.25; 
    this.addEventListener("keydown",this.KeyPush); 
} 

//TEMPDATA JUST TO TEST IF THE IDEAR WORKS 
PlMove(dir=0) 
{ 
    switch(dir) 
    { 
     case 0: 
      this.plHead.posX = this.plHead.posX +this.plSpeed; 
     break; 
     case 1: 
      this.plHead.posY = this.plHead.posY -this.plSpeed; 
     break; 
     case 2: 
      this.plHead.posX = this.plHead.posX -this.plSpeed; 
     break; 
     case 3: 
      this.plHead.posY = this.plHead.posY +this.plSpeed; 
     break; 
    } 
} 


//Player keypress 
KeyPush(evt) 
{  
    switch(evt.keyCode) 
    {          
     case 37: 
      this.PlMove(2); 
     break; 
     case 38: 
      document.getElementById("scoreDiv").innerHTML = this.title; 
     break; 
     case 39: 
      this.PlMove(0); 
     break; 
     case 40: 
      this.PlMove(3); 
     break; 
    } 
} 
} 

ただし、this.PlMoveは関数ではないというエラーが表示されていました。 さらに詳しい研究の後、私はこれを知った。クラス内にあってもJavaScriptクラスオブジェクトではなくDOMドキュメントを参照していました。

これで、イベントリスターを純粋なJavaScriptオブジェクトに置く方法を模索しようとしています.DOMオブジェクトではありません 私は自分のイベントをすべて作成する必要がありますが、私はそれを行う方法もありません。

+0

は 'addEventListener'は、DOMオブジェクトを対象としています。プレーンオブジェクトのイベントを処理する場合は、https://www.npmjs.com/package/event-emitterのような他のイベントメカニズムを考慮する必要があります。この質問は、https://stackoverflow.com/questions/20835768/addeventlistener-on-custom-object –

+0

の複製となります。あなたが私に与えたリンクはnpmを使用します。 node.jsを使用していないコンピュータでもコードが実行されますか? – skyline

答えて

0

単に、

document.addEventListener("keypress", function(event){ 
    console.log(event); 
    var keyName = event.key; 
}); 
+0

そのキーイベントのタイプはDOMキーイベントです。(ドキュメント、HTMLタグ、ectなど)はDOM要素でのみ動作します.JavaScriptオブジェクト(javerスクリプトクラス)にイベントリスターを適用します。 – skyline

+0

Dom要素ではありませんか?文脈はそうですか? – pirs

+0

私は、「私は、イベントリスターを純粋なJavaScriptオブジェクトに置く方法を模索しようとしていますが、DOMオブジェクトではありません」と言います。上のコードの文脈では、playerというクラスオブジェクトがあります。これはカスタムjavascriptオブジェクトであり、domオブジェクトではありません。 – skyline

関連する問題