【问题标题】:Javascript random cell background color changeJavascript随机单元格背景颜色变化
【发布时间】:2016-01-08 17:47:53
【问题描述】:

我正在尝试创建一个表。 ruudud.value 是来自 <select> 的值。但是当这个函数正在创建一个表格时,我希望它在其中放置一些随机的黄色单元格。 这是一个小型学校项目,此代码是创建战舰游戏的代码的一部分。

如果可能的话。当它确实创建了一个随机的黄色单元格时,它是否也可以将下一个单元格涂成黄色? (创建一个 2 单元船)。

function addTable() {

    var myTableDiv = document.getElementById("myDynamicTable");
    var table = document.createElement('TABLE');
    table.border = '1';

    var tableBody = document.createElement('TBODY');
    table.appendChild(tableBody);
    var x = Math.floor((Math.random() * ruudud.value) + 0);
    var y = Math.floor((Math.random() * ruudud.value) + 0);

    for (var i = 0; i < ruudud.value; i++) {
        var tr = document.createElement('TR');
        tableBody.appendChild(tr);
        console.log(x + "," + y);
        for (var j = 0; j < ruudud.value; j++) {
            var td = document.createElement('TD');
            var td = document.getElementsByTagName("td");
            td.width = '50';
            td.height = '50';
            td.style.backgroundColor = "red";
            td.setAttribute("onClick", "colorChange(this)")
            td.innerHTML = (i + "," + j);
            if (td[i].innerHTML == (x + "," + y)) {
                td[i].setAttribute("style", "background:yellow;");

            }
            tr.appendChild(td);
        }
    }
    myTableDiv.appendChild(table);
}
function colorChange(tdObj) {
tdObj.style.backgroundColor = "green";}

例子2:

function addTable() {

var myTableDiv = document.getElementById("myDynamicTable");


var table = document.createElement('TABLE');
table.border='1';

var tableBody = document.createElement('TBODY');
table.appendChild(tableBody);
var x = Math.floor((Math.random() * ruudud.value) + 0);
var y = Math.floor((Math.random() * ruudud.value) + 0);

for (var i=0; i<ruudud.value; i++){
   var tr = document.createElement('TR');
   tableBody.appendChild(tr);
 console.log(x + ","+y);  
   for (var j=0; j<ruudud.value; j++){
        var td = document.createElement('TD');
        var td2 = document.getElementsByTagName("td");
        var i = 0, tds = td.length;
        td.width='50';
        td.height='50';
        td.style.backgroundColor="white";
        td.setAttribute("onClick", "colorChange(this)")
        td.innerHTML = (i +","+ j);
        if(td2[i].innerHTML == (x + "," + y)) {
            td2[i].setAttribute("style", "background:yellow;");

        }
        tr.appendChild(td);
        }
   }
myTableDiv.appendChild(table);
}
function colorChange(tdObj) {
tdObj.style.backgroundColor = "green";}

【问题讨论】:

    标签: javascript colors html-table cell background-color


    【解决方案1】:

    在这两种情况下,您都是在将 td 元素附加到 DOM 之前选择它。您无需再次选择它,您可以在创建 td 元素时简单地应用样式。这是对您的代码的轻微修改。我还添加了一个条件,可以按照您的要求添加两格船。

    function addTable(double) {
        var myTableDiv = document.getElementById("myDynamicTable");
        var table = document.createElement('TABLE');
        table.border = '1';
    
        var tableBody = document.createElement('TBODY');
        table.appendChild(tableBody);
        var x = Math.floor((Math.random() * ruudud.value) + 0);
        var y = Math.floor((Math.random() * ruudud.value) + 0);
    
        for (var i = 0; i < ruudud.value; i++) {
            var tr = document.createElement('TR');
            tableBody.appendChild(tr);
            //console.log(x + "," + y);
            for (var j = 0; j < ruudud.value; j++) {
                var td = document.createElement('td');
                td.width = '50';
                td.height = '50';
                td.style.backgroundColor = "red";
                td.setAttribute("onClick", "colorChange(this)");
                td.innerHTML = (i + "," + j);
                if (x === i && y === j) {
                    td.setAttribute("style", "background:yellow;");
                }
                // If you need to enable two-cell ships, pass true to the function
                // You can allow horizontal or vertical cells by changing x and ys in the equality checks below
                if(double){
                    if(y+1 < ruudud.value){
                        if(x === i && y+1 === j){
                            td.setAttribute("style", "background:yellow;");
                        }
                    }
                    else{
                        if(x === i && y-1 === j){
                            td.setAttribute("style", "background:yellow;");
                        }
                    }
                }
                tr.appendChild(td);
            }
        }
        myTableDiv.appendChild(table);
    }
    
    function colorChange(tdObj) {
    tdObj.style.backgroundColor = "green";}
    
    addTable(true);
    

    【讨论】:

    • 它说 ruudud 现在没有定义。而且我不太明白如何让它们翻倍。还有一个问题,是否可以设置它有多少个黄色单元格。假设我制作了 10x10 网格。如何设置它以创建 7 个黄色双单元格?
    • 你可以设置一个变量var ruudud = {value:10};什么的。根据您的代码,我假设您是从其他地方获取该变量的。要获得两个黄色单元格,请将函数调用为addTable(true),否则调用为addTable()。我不太明白你问“7个黄色双格”的部分。
    • 嗯 addTable 已经设置为 true,但只出现单个单元格。出现的 7 个单元格是指一个网格,代码在其中随机放置 7 个黄色单元格。例如,目前仅在 10x10 表中放置 1 个随机黄色单元格。
    • 查看这个 jsFiddle 以获得原始解决方案:jsfiddle.net/tcesbn6n(单个和两个相邻的单元格)。另请查看此解决方案以解决可变数量的随机单元格以不同的颜色:jsfiddle.net/e0hvgr41。在函数调用中传递数字。
    • 我的 html 看起来像这样:
      现在,当我为许多随机单元格启动该函数时,它会显示:TypeError: myTableDiv is null
    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多