题解 | #移动控制#

移动控制

http://www.nowcoder.com/practice/84af7932f53f4bbeaa1fa079a138bb35

function bind() {
    var jsContainer = document.getElementById('jsContainer');
    var jsLayout = jsContainer.getElementsByTagName('tbody')[0];
    var trs = Array.from(jsLayout.children);
    var rows = trs.length;
    document.onkeydown = event => {
        if (!event) return;
        var code = event.keyCode || '';
        if (!{'37': 1, '38': 1, '39': 1, '40': 1}[code]) return;
        event.preventDefault && event.preventDefault();
        //TODO: 请实现按键控制
        var cur = jsLayout.getElementsByClassName('current')[0];
        var curp = cur.parentElement;
        var cur_row = 0;
        // 在几行
        for (var j=0;j<rows;j++) {
            if (curp === trs[j]) {
                cur_row = j;
                break;
            }
        }
        // 几列
        var curp_child = Array.from(curp.children);
        var curp_child_len = curp_child.length;// 共几列
        var cur_col = 0;//几列
        for (var i=0;i<curp_child_len;i++) {
            if (cur === curp_child[i]) {
                cur_col = i;
                break;
            }
        }

        if (code == 37) {
            // 左
            cur_col -= 1;
        } else if (code == 38) {
            // 上
            cur_row -= 1;
        } else if (code == 39) {
            // 右
            cur_col += 1;
        } else if (code == 40) {
            // 下
            cur_row += 1;
        }
        cur_col = cur_col < 0 ? curp_child_len - 1 : cur_col;
        cur_row = cur_row < 0 ? rows - 1 : cur_row;
        cur_col = cur_col >= curp_child_len ? 0 : cur_col;
        cur_row = cur_row >= rows ? 0 : cur_row;

        cur.classList.remove('current');
        trs[cur_row].children[cur_col].classList.add('current');
    };
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务