[解決済み] getContext は関数ではありません。
2022-01-28 13:24:34
質問
キャンバスを使った基本的なWebアプリケーションを作っているのですが、ウィンドウのサイズが変わるとキャンバスのサイズも動的に変更されます。静的には何の欠陥もなく動作していますが、動的にそれを行うためにオブジェクトを作成すると、エラーがスローされます。
chromeではエラーは
Uncaught TypeError: オブジェクト [object Object] にはメソッド 'getContext' がありません。
で、firefoxではそうなっています。
this.element.getContext は関数ではありません。
ウェブで検索したところ、よくある問題のようですが、紹介されているどの修正も違いはありません。
問題のコードは以下の通りです。
layer['background'] = new canvasLayer("body","background");
function canvasLayer(location,id){
$(location).append("<canvas id='"+id+"'>unsupported browser</canvas>");
this.element=$(id);
this.context = this.element.getContext("2d"); //this is the line that throws the error
this.width=$(window).width(); //change the canvas size
this.height=$(window).height();
$(id).width($(window).width()); //change the canvas tag size to maintain proper scale
$(id).height($(window).height());
}
よろしくお願いします。
どのように解決するのですか?
あなたの価値
this.element = $(id);
はjQueryオブジェクトであり、純粋なCanvas要素ではありません。
を呼び出すことができるように戻すには
getContext()
を呼び出す。
this.element.get(0)
あるいは、jQueryオブジェクトではなく、実際の要素を保存するのがよいでしょう。
function canvasLayer(location, id) {
this.width = $(window).width();
this.height = $(window).height();
this.element = document.createElement('canvas');
$(this.element)
.attr('id', id)
.text('unsupported browser')
.attr('width', this.width) // for pixels
.attr('height', this.height)
.width(this.width) // for CSS scaling
.height(this.height)
.appendTo(location);
this.context = this.element.getContext("2d");
}
実行中のコードを見る http://jsfiddle.net/alnitak/zbaMh/ デバッグ出力で結果のオブジェクトを見ることができるように、Chrome Javascript Consoleを使用するのが理想的です。
関連
-
[解決済み】Uncaught ReferenceError。Reactが定義されていない
-
[解決済み】Jestが予期しないトークンに遭遇した
-
[解決済み】TypeError:res.jsonは関数ではありません。
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] URLを新しいタブで開く(新しいウィンドウではない)
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
-
[解決済み】Angularウィンドウのリサイズイベント
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み] jQueryで、ユーザーがそのフィールドを編集している間、テキストフィールドの最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み] Uncaught TypeError: 未定義のプロパティ 'top' を読み込めない
-
[解決済み】SecurityError: オリジンを持つフレームがクロスオリジンフレームにアクセスするのをブロックした
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み] テスト
-
[解決済み】Reactのeslintエラーはpropsの検証で見つからない
-
[解決済み】エラー:リクエストのエンティティが大きすぎる
-
[解決済み】ETIMEDOUTエラーの対処方法は?
-
[解決済み】中央値の計算 - javascript