顺时针图像一键切换 Javascript table

Clockwise Image swap in Javascript table with one click

我正在尝试创建一个 table,其中包含 4 张随机排列的图像。当单击一个图像时,它应该与顺时针方向的图像一起移动。但是,当我这样做时,尽管更改了 onclick + "clickmove(3)" 属性,但我还是让两个对角线图像相互移动。

单击最后一个插槽后,程序 returns 出现错误并且不移动图像,表明我无法移动到第三个插槽的 x+1 以上。我试过各种方法都没有用。

提前致谢

<html>
<script>

    function clickMove(x)
    {
        var temp;
        d = document.images

        if (d[x].src)
        {
            temp = d[x].src
            d[x].src = d[x + 1].src
            d[x + 1].src = temp
        }
}
    function check(n)
    {
        //d = document.images[n].src

        //alert(s+":"+d.length

        //if (d.charAt(d.length == 1)
    }
</script>


    <head>
        <title> Assignment 4 Kaltenbaugh </title>
    </head>

        <body background = "http://webclass.sru.edu/CPSC-217-01.0118/Kaltenbaugh%20Cain%20%20CXK1047/Assignment3/table1.png">
            <table border = "0" cellspacing = "0" cellpadding = "0" align = "center">
                <tr>
                    <td id = "t0"><img src = "http://webclass.sru.edu/CPSC-217-01.0118/Kaltenbaugh%20Cain%20%20CXK1047/Assignment4/treePic_04.jpg" onclick = "clickMove(0)"></td>
                    <td id = "t1"><img src = "http://webclass.sru.edu/CPSC-217-01.0118/Kaltenbaugh%20Cain%20%20CXK1047/Assignment4/treePic_03.jpg" onclick = "clickMove(1)"></td>
                </tr>
                <tr>
                    <td id = "t2"><img src = "http://webclass.sru.edu/CPSC-217-01.0118/Kaltenbaugh%20Cain%20%20CXK1047/Assignment4/treePic_02.jpg" onclick = "clickMove(3)"></td>
                    <td id = "t3"><img src = "http://webclass.sru.edu/CPSC-217-01.0118/Kaltenbaugh%20Cain%20%20CXK1047/Assignment4/treePic_01.jpg" onclick = "clickMove(2)"></td>
                </tr>
            </table>
        </body>

</html>

当x为3时,x+1为4,越界。当 x 为 0、1 或 2 时 x + 1 可以,但您想将图像 3 与图像 0 交换。

有多种方法可以做到这一点,其中之一是将 x + 1 替换为 (x + 1) % 4

    if (d[x].src)
    {
        temp = d[x].src
        d[x].src = d[(x + 1) % 4].src
        d[(x + 1) % 4].src = temp
    }

编辑:在上面的示例中,我假设您基本上想要 x + 1,但您只需要解决 wrap-around 问题。至于顺时针的问题,这样想:

0 1
2 3

0 应与 1 交换,1 应与 3 交换,2 应与 0 交换,3 应与 2 交换。只需从这些关系中提取一点 table。

    if (d[x].src)
    {
        var y = [1, 3, 0, 2][x];
        temp = d[x].src;
        d[x].src = d[y].src;
        d[y].src = temp;
    }