когда нажимаю стрелку вправо крайнего числа например 5 он его меняет на 8 а должен на 6... помогите

'use strict'

const squareBody = document.querySelector('.square-body')
const btnReset = document.querySelector('.btn-reset')

const changePosition = (block, direction) => {
    const numA = block.querySelector('.block-number').textContent
    const coordinates = block.getBoundingClientRect()
    const height = coordinates.height
    const width = coordinates.width
    const x = coordinates.x + (width / 2)
    const y = coordinates.y + (height / 2)

    let targetElem

    switch (direction) {
        case 'top':
            targetElem = document.elementFromPoint(x, y - height) || document.elementFromPoint(x - width, 650)
            if (targetElem.closest('.square-body')) {
                const numB = targetElem.textContent
                targetElem.textContent = numA
                block.querySelector('.block-number').textContent = numB
            }
            break;
        case 'left':
            targetElem = document.elementFromPoint(x - width, y)
            if (!targetElem.closest('.square-body')) {
                targetElem = document.elementFromPoint(1200, y - height)
            }
            if (targetElem && targetElem.closest('.square-body')) {
                const numB = targetElem.textContent
                targetElem.textContent = numA
                block.querySelector('.block-number').textContent = numB
            }
            break;
        case 'right':
            targetElem = document.elementFromPoint(x + width, y)
            if (!targetElem.closest('.square-body')) {
                targetElem = document.elementFromPoint(650, y + height)
            }
            if (targetElem && targetElem.closest('.square-body')) {
                const numB = targetElem.textContent
                targetElem.textContent = numA
                block.querySelector('.block-number').textContent = numB
            }
            break;
        case 'bottom':
            targetElem = document.elementFromPoint(x, y + height)
            if (!targetElem.closest('.square-body')) {
                targetElem = document.elementFromPoint(x + width, 15)
            }
            if (targetElem && targetElem.closest('.square-body')) {
                const numB = targetElem.textContent
                targetElem.textContent = numA
                block.querySelector('.block-number').textContent = numB
            }
            break;
    }
}

const resetField = () => {
    const blocks = document.querySelectorAll('.block')
    blocks.forEach((block, index) => {
        block.querySelector('.block-number').textContent = index + 1
    })
    saveNumbers()
}

const getNumbers = () => {
    const numbers = JSON.parse(localStorage.getItem('numbers'))
    if (numbers) {
        const blockNumbers = document.querySelectorAll('.block-number')
        blockNumbers.forEach((block, index) => {
            block.textContent = numbers[index]
        })
    }

}

const saveNumbers = () => {
    const numbers = []
    const blockNumbers = document.querySelectorAll('.block-number')
    blockNumbers.forEach(block => {
        numbers.push(block.textContent)
    })
    localStorage.setItem('numbers', JSON.stringify(numbers))
}
getNumbers()

squareBody.addEventListener('click', e => {
    if (e.target.closest('.arrow')) {
        const block = e.target.closest('.block')
        const direction = e.target.closest('.arrow').classList[1]
        changePosition(block, direction)
        saveNumbers()
    }
})

btnReset.addEventListener('click', resetField)
@font-face {
    font-family: 'Roboto';
    src: url('../fonts/Roboto-Regular.woff2') format('woff2'),
    url('../fonts/Roboto-Regular.woff') format('woff');
    font-weight: normal;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Roboto';
    src: url('../fonts/Roboto-Bold.woff2') format('woff2'),
    url('../fonts/Roboto-Bold.woff') format('woff');
    font-weight: bold;
    font-style: normal;
    font-display: swap;
}
.container{
    margin: 0 auto;
    max-width: 1170px;
    display: flex;
    flex-direction: column;
    align-items: center;
    font-family: Roboto, sans-serif;
}
.square-body{
    max-width: 780px;
    border: 1px solid black;
    display: flex;
    flex-wrap: wrap;
    justify-content: space-around;
    margin: 0 auto;
    padding: 5px;
}
.block{
    width: 150px;
    border: 1px solid black;
    height: 150px;
    margin-bottom: 5px;
    /* Permalink - use to edit and share this gradient: https://colorzilla.com/gradient-editor/#1e5799+0,2989d8+50,207cca+51,7db9e8+90&1+0,0.61+75 */
    background: -moz-linear-gradient(45deg,  rgba(30,87,153,1) 0%, rgba(41,137,216,0.74) 50%, rgba(32,124,202,0.73) 51%, rgba(89,162,220,0.61) 75%, rgba(125,185,232,0.61) 90%); /* FF3.6-15 */
    background: -webkit-linear-gradient(45deg,  rgba(30,87,153,1) 0%,rgba(41,137,216,0.74) 50%,rgba(32,124,202,0.73) 51%,rgba(89,162,220,0.61) 75%,rgba(125,185,232,0.61) 90%); /* Chrome10-25,Safari5.1-6 */
    background: linear-gradient(45deg,  rgba(30,87,153,1) 0%,rgba(41,137,216,0.74) 50%,rgba(32,124,202,0.73) 51%,rgba(89,162,220,0.61) 75%,rgba(125,185,232,0.61) 90%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#9c7db9e8',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
    position: relative;
    border-radius: 10px;
    }
.block-number{
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 44px;
    font-weight: bold;
    color: #383030;
}
.block-btn{
    position: absolute;
    left: 0;
    top: 0;
    height: 100%;
    width: 100%;
    opacity: 0;
    visibility: hidden;
}
.block:hover .block-btn{
    opacity: 0.7;
    visibility: visible;
    background-color: #4e4141;
}
.arrow{
    position: absolute;
    width: 50px;
    height: 50px;
    border-radius: 50%;
    background-color: white;
    cursor: pointer;
    color: white;
    display: flex;
    justify-content: center;
    align-items: center;
    opacity: 0;
    transition: all 0.2s;
}
.arrow:hover{
    opacity: 1;
}
.arrow img{
    width: 80%;
    height: 80%;

}
.left{
    left: 0;
    top: 50%;
    transform: translateY(-50%);
}
.right{
    right: 0;
    top: 50%;
    transform: translateY(-50%)
}
.top{
    top: 0;
    left: 50%;
    transform: translateX(-50%)
}
.bottom{
    bottom: 0;
    left: 50%;
    transform: translateX(-50%)
}
.btn-reset{
    padding: 16px 70px;
    margin: 30px;
    cursor: pointer;
    border-radius: 10px;
    background: -moz-linear-gradient(45deg,  rgba(30,87,153,1) 0%, rgba(41,137,216,0.74) 50%, rgba(32,124,202,0.73) 51%, rgba(89,162,220,0.61) 75%, rgba(125,185,232,0.61) 90%); /* FF3.6-15 */
    background: -webkit-linear-gradient(45deg,  rgba(30,87,153,1) 0%,rgba(41,137,216,0.74) 50%,rgba(32,124,202,0.73) 51%,rgba(89,162,220,0.61) 75%,rgba(125,185,232,0.61) 90%); /* Chrome10-25,Safari5.1-6 */
    background: linear-gradient(45deg,  rgba(30,87,153,1) 0%,rgba(41,137,216,0.74) 50%,rgba(32,124,202,0.73) 51%,rgba(89,162,220,0.61) 75%,rgba(125,185,232,0.61) 90%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#9c7db9e8',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
    font-size: 24px;
}
.description{
    font-size: 20px;
}
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="style/style.css">
    <script src="scripts/script.js" defer></script>
    <title>Document</title>
</head>
<body>
<div class="wrapper">
    <div class="container">
        <div class="square-body">
            <div class="block">
                <div class="block-number">1</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">2</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">3</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">4</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">5</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">6</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">7</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">8</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">9</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">10</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">11</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">12</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">13</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">14</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">15</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">16</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">17</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">18</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">19</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">20</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">21</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">22</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">23</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">24</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
            <div class="block">
                <div class="block-number">25</div>
                <div class="block-btn">
                    <div class="arrow left"><img src="img/arrow-left.svg" alt=""></div>
                    <div class="arrow right"><img src="img/arrow-right.svg" alt=""></div>
                    <div class="arrow top"><img src="img/arrow-up.svg" alt=""></div>
                    <div class="arrow bottom"><img src="img/arrow-down.svg" alt=""></div>
                </div>
            </div>
        </div>
        <button class="btn-reset">Reset</button>
        <div class="description">
            <p>На каждой клетке вы видите кнопки с направлением, напишите скрипт, чтобы при клике на кнопку, клетка
                менялась с соответствующей клеткой своим положением, соответсвенно направлению стрелки.</p>
            <p>Если вверх,вниз вправо или влево идти некуда, то происходить ничего не должно(со следующей строкой поменяться можно (например 20 с 21)</p>
            <p>При клике на кнопку <b>RESET</b> все клетки должны вставать на свои места</p>
            <p>Лезть в вёрстку запрещено, использовать только те классы, что предоставлены</p>
            <p>Ошибок в консоли быть не должно</p>
        </div>
    </div>
</div>

</body>
</html>


Ответы (0 шт):