セルをドラッグで選択するときに、
7×7のセルをドラッグで選択をするときに、選択できない場所を作りたいと思っているのですが、どのようにすればいいのでしょうか?
ネット上にあるサンプルでは画像の(0、0)のセルから選択できるのですが、これを(1,2)を選択できるセルの開始点として5×6の範囲で選択できるようにしたいと思っています。
</tytle>までのひながた以降のコードです。
わかる方よろしくお願いします。
<style type="text/css">
html, body{
margin: 0px;
}
table{
-moz-user-select: none;
-khtml-user-select: none;
user-select: none;
width: 500px;
height: 500px;
}
table, td, th{
margin: 10px;
border-style: solid;
border-color: black;
border-width: 1px;
}
</style>
<script type="text/javascript">
var startCell = null;
//マウスダウンのイベント処理
function mouseDown(table, e){
if (!e) var e = window.event;
startCell = e.srcElement? e.srcElement: e.target;
if(startCell.tagName != "TD"){
startCell = null;
return;
}
mouseMove(table, e);
}
//マウスアップのイベント処理
function mouseUp(table, e){
if (!e) var e = window.event;
var endCell = e.srcElement?e.srcElement:e.target;
if(!(endCell.tagName=="TD" && startCell))
return false;
//セルの位置を取得
var from = getCellPos(table, startCell);
var to = getCellPos(table, endCell);
if(!from || !to)
return false;
//mouseMoveで選択状態表示の更新をさせないようにする
startCell = null;
//ここに選択後の処理を書く
alert("("+from.col+", "+from.row+") -> ("+to.col+", "+to.row+")");
}
//マウス移動のイベント処理
function mouseMove(table, e){
if (!e) var e = window.event;
var endCell = e.srcElement?e.srcElement:e.target;
if(!(endCell.tagName=="TD" && startCell))
return false;
//セルの位置を取得
var from = getCellPos(table, startCell);
var to = getCellPos(table, endCell);
if(!from || !to)
return false;
//色を変更
var x, y, cells;
for(y=0; y<table.rows.length; y++){
row = table.rows.item(y);
for(x=0; x<row.cells.length; x++){
if((from.row-y)*(y-to.row)>=0 && (from.col-x)*(x-to.col)>=0)
row.cells.item(x).style.backgroundColor = "#ffdddd";//選択状態の色
else
row.cells.item(x).style.backgroundColor = "transparent";//未選択状態の色
}
}
}
//tableの中のcellの位置を取得する
function getCellPos(table, cell){
var pos = new Object();
if(cell.nodeName == "TD"){
var x, y, cells;
for(y=0; y<table.rows.length; y++){
row = table.rows.item(y);
for(x=0; x<row.cells.length; x++){
if(row.cells.item(x) == cell){
pos.row = y;
pos.col = x;
return pos;
}
}
}
}
return null;
}
</script>
</head>
<body><!-- Google Analytics Start -->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-9296140-1");
pageTracker._trackPageview();
} catch(err) {}
</script>
<!-- Google Analytics End -->
<table onmousedown="mouseDown(this, event); return false;" onmouseup="mouseUp(this, event);" onmousemove="mouseMove(this, event); return false;">
<tr>
<td>(0,0)</td><td>(1,0)</td><td>(2,0)</td><td>(3,0)</td><td>(4,0)</td><td>(5,0)</td><td>(6,0)</td>
</tr>
<tr>
<td>(0,1)</td><td>(1,1)</td><td>(2,1)</td><td>(3,1)</td><td>(4,1)</td><td>(5,1)</td><td>(6,1)</td>
</tr>
<tr>
<td>(0,2)</td><td>(1,2)</td><td>(2,2)</td><td>(3,2)</td><td>(4,2)</td><td>(5,2)</td><td>(6,2)</td>
</tr>
<tr>
<td>(0,3)</td><td>(1,3)</td><td>(2,3)</td><td>(3,3)</td><td>(4,3)</td><td>(5,3)</td><td>(6,3)</td>
</tr>
<tr>
<td>(0,4)</td><td>(1,4)</td><td>(2,4)</td><td>(3,4)</td><td>(4,4)</td><td>(5,4)</td><td>(6,4)</td>
</tr>
<tr>
<td>(0,5)</td><td>(1,5)</td><td>(2,5)</td><td>(3,5)</td><td>(4,5)</td><td>(5,5)</td><td>(6,5)</td>
</tr>
<tr>
<td>(0,6)</td><td>(1,6)</td><td>(2,6)</td><td>(3,6)</td><td>(4,6)</td><td>(5,6)</td><td>(6,6)</td>
</tr>
</table>
</body>
</html>
お礼
ご回答ありがとうございました。 自分もsetTimeoutで試していたのですが、 このように自身のファンクションを呼び出す 発想はありませんでした。 助かりました。