javascript (imageのwidthなどについて)
■imageのプロパティが認識されるタイミングのメモ
ボタンを押すと画像が追加されるjavascriptで、追加した時にそのプロパティを取得して、それに応じた処理をさせたい。
画像の追加は下のコード。ブラウザ起動時はボタンだけ入れておき、クリックするとcheckImg()関数が起動して、同じフォルダの画像ファイルからimgタグを作成して追加する。
<html>
<head>
<meta charset="utf-8">
<script>
function checkImg() {
let filepath = "./samplePic.png";
let imageSample = document.createElement('img');
imageSample.src = filepath;
document.body.appendChild(imageSample);
console.log(imageSample.width);
}
</script>
</head>
<body>
<button type="button" onclick="checkImg()">Click</button>
</body>
</html>
画像ファイルは下記のもの(幅300px, 高さ200px)
このコードをブラウザで実行すると、画像ファイルは追加され、コンソール画面には、console.log(imageSample.width)の出力が0として出てくる。もう一度クリックすると再度画像ファイルが追加され、今後は300(画像の幅サイズ)として出てきた。
この300の値を使って、コードの処理分けとかをしたいけど、2回クリックしなければ値が取得できないのでは使えない。何か方法はないか試していると、onloadを使うと一度クリックした状態で値が取得できた。
そのコードが下のもの。imageSample.onloadの部分を追加した。
<html>
<head>
<meta charset="utf-8">
<script>
function checkImg() {
let filepath = "./samplePic.png";
let imageSample = document.createElement('img');
imageSample.src = filepath;
console.log(imageSample.width);
document.body.appendChild(imageSample);
imageSample.onload = () => {
console.log(imageSample.width);
}
}
</script>
</head>
<body>
<button type="button" onclick="checkImg()">Click</button>
</body>
</html>
このコードを実行して、デバッグを見ると、ボタンを押した後にcheckImg()が起動して下画像の6行目から順次実行されていく。11行目のonloadの中身はスキップして、18行目のbodyタグ内に戻る。その後、11行目に戻って12行目のコンソールが実行される。画面下の0と300は、それぞれ9行目と12行目の結果となる。
多分bodyタグを一度通って、画像がロードされる必要があると思う。
今回は自分のPC内だけの処理で、これがサーバクライアント間の処理で使用できるか分からないけど、とりあえず画像ファイルの幅は取得できた。