javascriptを勉強しています。
参考書の例題で
マウスクリックしたり、クリックしたまま移動すると、マス目が黒い画像(black.png)に変わり、
マウスを離してる間は処理を行わないプログラムがありますが、
それを少しいじって、マウスをクリックしていない時になぞると、黒だったら白(block.png)にできましたが、
そのままですと、マウスをクリックしていない時になぞると、常に黒から白に変えてしまって、使い勝手が悪いので
マウスをクリックした場合や、そのまま動かした場合にのみ、マス目状の画像を、黒だったら白(block.png)、白だったら黒(black.png)に変えれるようにしたいです。
黒く塗りつぶしている状態か否かを判別する必要もあると思うのですが、判別する記述方法がわからず、
またフラグを増やせ良いのかよくわかりません。
図にしますと、
マウスクリックしたまま動かすと黒くなりますが、
□□□□□□□□
□□□□□□□□
□□□□□□□□
□□□□□□□■
□□□□■□□■
□□□□■□□■
□□□□■□□■
□□□□■□□■
ふたたびなぞると今度は黒い部分が白くする方法が検討つきません。
□□□□□□□□
□□□□□□□□
□□□□□□□□
□□□□□□□□
□□□□■□□□
□□□□■□□□
□□□□■□□■
□□□□■□□■
丸投げで、全部教えてくれなくても、ヒントだけでも教えてもらえないでしょうか?
宜しくお願いしますm(__)m
(7/14 コメントを少し追加しました)
javascript
1<!DOCTYPE html> 2<html> 3<head> 4<script> 5 var Flag = false; // フラグ 6 var NN=64; // 枠の縦横のマス目数 7 8 window.document.onmousemove=move; // マウスを動かすと関数moveが呼び出される 9 window.document.onmouseup=up; // マウスクリックを離すと、関数upが呼び出される 10 11 function down() 12 { 13 Flag = true; // フラグにtrueを代入 14 move(); // 関数moveを呼び出し(移動時だけでなく、クリックして離した場合でも、マス目を画像にする為) 15 } 16 17 function up() 18 { 19 Flag = false; // フラグにfalseを代入 20 } 21 22 function move() 23 { 24 var x,y,n,obj; 25 x=Math.floor((event.clientX-10)/10); 26 y=Math.floor((event.clientY-10)/10); 27 if (0<=x && x<NN && 0<=y && y<NN){ 28 n=y*NN+x; 29 obj=document.getElementById("square"+n); 30 if (Flag){ 31 obj.style.cursor="pointer"; // マウスのマークをハンドマークにする 32 obj.src="black.png"; // ■の画像を代入する。 33 } else { 34 obj.style.cursor="default"; // マウスのマークを通常のカーソルにする 35 obj.src="block.png"; // □の画像を代入する。 36 } 37 } 38 return false; 39 } 40 41</script> 42</head> 43<body> 44<div id="canvas"> 45</div> 46<script> 47 48 var x,y,n=0,tag=""; 49 for (y=10;y<=(NN*10);y+=10){ 50 for (x=10;x<=(NN*10);x+=10){ 51 tag+="<img id='square"+n+"' src='block.png' style='position:absolute; left:"+x+"px;top:"+y+"px' onMouseDown='down()' />" 52 n++; 53 } 54 } 55 document.getElementById("canvas").innerHTML=tag; 56 57</script> 58</body> 59</html>
回答5件
あなたの回答
tips
プレビュー