ちょっとまずかったかな〜。
http://www.tagindex.com/cgi-lib/q4bbs/patio.cgi?mode=view&no=2677
あとは、think49 さんに託すね ^^;
質問も回答も見ているとなぜだか、イライラするんだな。
こういう投げやりな気持ちではだめなんだろうか・・・。
-
- 追記
案の定、画像に変更したがっている。背景を画像にするだけなんだけど・・・
table::#hoge の中にいるのか確認していないので、テーブルが2箇所にあるとまずいよ!
製作時間は40分くらい(?)で書いたのだけど、後半はグダグダになってきていたし
何より、本日の睡眠時間1時間30分。ちょっと眠い。
<!DOCTYPE html> <title></title> <style type="text/css"> #hoge { border : 0px none; border-collapse: collapse; } #hoge td { boder : 0px none; width : 32px; height: 32px; } </style> <body> <form action="#"> <p> x = <input type="text" name="sizex" value="25"><br> y = <input type="text" name="sizey" value="15"><br> <input type="button" name="make" value="Make Table"> </p> </form> <hr> <table id="hoge"> <tr><td> </table> <script> //@cc_on var hogeArray; var colorList = ['#888', '#eee', '#f88', '#8f8', '#88f', '#ff8', '#8ff', '#f8f']; var alertTd = function (evt) { var mess = [ ]; var x = this.cellIndex; var y = this.parentNode.rowIndex; mess.push ('Event:' + evt.type); mess.push ('x :' + x); mess.push ('y :' + y); this.style.backgroundColor = colorList[hogeArray[y][x] += hogeArray[y][x] < 8 ? 1: -8]; alert (mess.join ('\n')); } var makeHogeTable = function () { var hoge, x, y, fg, tb, tr, td, ctr, ctd, ix, iy, ic; var doc = this.ownerDocument; var es = this.elements; if (hoge = doc.getElementById('hoge'), ! hoge) return; while (hoge.hasChildNodes ()) hoge.removeChild (hoge.firstChild); fg = doc.createDocumentFragment (); tb = doc.createElement ('tbody'); fg.appendChild (tb); tr = doc.createElement ('tr'); td = doc.createElement ('td'); td.appendChild (doc.createTextNode ('')); hogeArray = [ ]; x = es['sizex'].value |0; y = es['sizey'].value |0; if (x < 1 || y < 1) return; for (iy = 0; iy < y; iy++) { hogeArray[iy] = []; ctr = tr.cloneNode (false); ix = x; for (ix = 0; ix < x; ix++) { hogeArray[iy][ix] = ic = (iy&1)^(ix&1) * 1; ctd = td.cloneNode (true); ctd.style.backgroundColor = colorList[ic]; ctr.appendChild (ctd); } tb.appendChild (ctr); } hoge.appendChild (fg); } var clickHandler = function (evt) { var n = evt./*@if(1) srcElement @else@*/ target /*@end@*/; if ('make' === n.name) makeHogeTable.call (n.form); if ('TD' === n.nodeName) { alertTd.call (n, evt); } }; var mouseoverHandler = function (evt) { var n = evt./*@if(1) srcElement @else@*/ target /*@end@*/; var x, y; if ('TD' === n.nodeName) { x = n.cellIndex; y = n.parentNode.rowIndex; n.style.backgroundColor = colorList[hogeArray[y][x] += hogeArray[y][x] < 8 ? 1: -8]; } } document./*@if(1) attachEvent ('on' + @else@*/ addEventListener (/*@end@*/ 'click', clickHandler, false ); document./*@if(1) attachEvent ('on' + @else@*/ addEventListener (/*@end@*/ 'mouseover', mouseoverHandler, false ); </script>
追記。
その後、希望に近いものと思われるものを難読化(?)して書いてみた。
<!DOCTYPE html> <title></title> <style type="text/css"> #hoge { border : 0px none; border-collapse: collapse; } #hoge tr td { padding : 0; } #hoge tr td img { vertical-align: top; } </style> <body> <form action="#"> <p> x = <input type="text" name="sizex" value="10"><br> y = <input type="text" name="sizey" value="10"><br> <input type="button" name="make" value="Make Table"> / <input type="button" name="mode" value="Change Mode"> </p> </form> <hr> <table id="hoge"> <tr><td> </table> <script> //@cc_on var size = 600; var mode = 0; var scale = 0; var map; var imageList = [ ['0.gif', '1.gif', '2.gif', '3.gif', '4.gif', '5.gif'], ['0b.gif', '1b.gif', '2b.gif', '3b.gif', '4.gif', '5b.gif'] ]; var makeHogeTable = function (f) { var hoge, x, y, fg, tb, tr, td, img, ctr, ctd, cimg, ix, iy, ic, sx, sy; var doc = this.ownerDocument, es = this.elements; if (hoge = doc.getElementById('hoge'), ! hoge) return; while (hoge.hasChildNodes ()) hoge.removeChild (hoge.firstChild); fg = doc.createDocumentFragment (); tb = doc.createElement ('tbody'); fg.appendChild (tb); tr = doc.createElement ('tr'); td = doc.createElement ('td'); img = doc.createElement ('img'); td.appendChild (img); f || (map = [ ]); img.width = (sx = size / (x = +es['sizex'].value) |0) + ''; img.height = (sy = size / (y = +es['sizey'].value) |0) + ''; img.alt = ''; if (x < 1 || y < 1) return; scale = (sx > 63) * 1; for (iy = 0; iy < y; iy++) { f || (map[iy] = []); ctr = tr.cloneNode (false); for (ix = 0; ix < x; ix++) { ic = f ? map[iy][ix]: (map[iy][ix] = (iy^ix)&1); ctd = td.cloneNode (true); ctd.firstChild.src = getImage(ix,iy); ctr.appendChild (ctd); } tb.appendChild (ctr); } hoge.appendChild (fg); } var handler = function (evt) { var t, n, x, y; n = evt./*@if(1) srcElement @else@*/ target /*@end@*/; switch (evt.type) { case 'mouseover' : if ('IMG' === n.nodeName && 'TD' === (t = n.parentNode).nodeName) { x = t.cellIndex; y = t.parentNode.rowIndex; map[y][x] = !map[y][x]; n.src = getImage(x,y); } break; case 'click' : default : if ('make' === n.name) (mode = 0), makeHogeTable.call (n.form); if ('mode' === n.name) (mode = mode ? 0: 2), makeHogeTable.call (n.form, true); if ('IMG' === n.nodeName && 'TD' === (t = n.parentNode).nodeName) { x = t.cellIndex; y = t.parentNode.rowIndex; map[y][x] = !map[y][x]; n.src = getImage (x,y); } break; } }; var getImage = function (x, y) { return './img/' + imageList[scale][(map[y][x])+mode]; } document./*@if (1) attachEvent ('on' + @else@*/ addEventListener (/*@end@*/ 'click', handler, false ); document./*@if (1) attachEvent ('on' + @else@*/ addEventListener (/*@end@*/ 'mouseover', handler, false ); </script>