Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.12.2021, 14:32
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

Перемещение изображений "ходом конём"
Здравствуйте, знатоки JavaScript!))
В нижеприведённом примере требуется, чтобы изображения при клике менялись местами не произвольно, а строго "ходом конём" ("Г").
Пожалуйста, подскажите решение!
<html>
<head>
<script type="text/javascript">
var temp = new Image();
var loc;
var gotit;
function exch(e)
{
    var srcElement; 
    srcElement = e.srcElement ? e.srcElement : e.target; 

if (srcElement.className == "click")
{
if (gotit == 1)
{
gotit = 0;
document.images[loc].src = document.images[srcElement.name].src;
document.images[srcElement.name].src = temp.src;
stt=srcElement.name;
}
else
{
gotit = 1;
loc = srcElement.name;
temp.src = document.images[loc].src;
}
}
}
</script>
</head>
<body>
<form onclick="exch(event)">   
<table align="center" cellspacing="1" cellpadding="0">
<tr>
<td><img class="click" name="1a1b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=§"></td>
<td><img class="click" name="1a2b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=©"></td>
<td><img class="click" name="1a3b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=π"></td>
<td><img class="click" name="1a4b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=4"></td>
</tr>
<tr>
<td><img class="click" name="2a1b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=≈"></td>
<td><img class="click" name="2a2b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=¶"></td>
<td><img class="click" name="2a3b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=@"></td>
<td><img class="click" name="2a4b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=№"></td>
</tr>
<tr>
<td><img class="click" name="3a1b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=$"></td>
<td><img class="click" name="3a2b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=¿"></td>
<td><img class="click" name="3a3b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=ƒ"></td>
<td><img class="click" name="3a4b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=®"></td>
</tr>
</table>
</form>
</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 11.12.2021, 14:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Борис К,
https://learn.javascript.ru/js-animation
Ответить с цитированием
  #3 (permalink)  
Старый 11.12.2021, 19:10
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

Сообщение от рони
https://learn.javascript.ru/js-animation
Рони, благодарю за оперативный ответ!
Но всё же непонятно, как JavaScript-анимация обеспечит обмен изображения местами при клике, например, на изображения "§" и "@" или "§" и "¿" ("ход конём", "Г"), при этом другие варианты отличные от "ходов конём" ("Г") должны быть заблокированы (например, "§" и "№")... извините, но, возможно, мы неправильно друг друга поняли!)
Ответить с цитированием
  #4 (permalink)  
Старый 11.12.2021, 20:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Борис К,
ок, проверяйте разницу между ячейками td.cellIndex и tr.rowIndex.
Ответить с цитированием
  #5 (permalink)  
Старый 11.12.2021, 21:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

обмен ячеек, ход конём
Борис К,
<!DOCTYPE html>
<html>

<head>
    <style type="text/css">
        .active {
            opacity: .2;
        }
    </style>
    <script type="text/javascript">
        let temp = [];

        function exch(event) {
            let img;
            if (img = event.target.closest(".click")) {
                let cellIndex = event.target.closest("td").cellIndex;
                let rowIndex = event.target.closest("tr").rowIndex;
                if (temp.length) {
                    temp[0].classList.remove("active");
                    let x = Math.abs(cellIndex - temp[1]);
                    let y = Math.abs(rowIndex - temp[2]);
                    if ((x == 1 && y == 2) || (x == 2 && y == 1) || img === temp[0]) {
                        [img.src, temp[0].src] = [temp[0].src, img.src]
                        temp = [];
                    } else {
                        img.classList.add("active");
                        temp = [img, cellIndex, rowIndex];
                    }
                } else {
                    img.classList.add("active");
                    temp = [img, cellIndex, rowIndex];
                }
            }
        }
    </script>
</head>

<body>
    <form onclick="exch(event)">
        <table align="center" cellspacing="1" cellpadding="0">
            <tr>
                <td><img class="click" name="1a1b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=§"></td>
                <td><img class="click" name="1a2b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=©"></td>
                <td><img class="click" name="1a3b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=π"></td>
                <td><img class="click" name="1a4b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=4"></td>
            </tr>
            <tr>
                <td><img class="click" name="2a1b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=≈"></td>
                <td><img class="click" name="2a2b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=¶"></td>
                <td><img class="click" name="2a3b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=@"></td>
                <td><img class="click" name="2a4b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=№"></td>
            </tr>
            <tr>
                <td><img class="click" name="3a1b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=$"></td>
                <td><img class="click" name="3a2b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=¿"></td>
                <td><img class="click" name="3a3b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=ƒ"></td>
                <td><img class="click" name="3a4b" src="https://placehold.co/100x100/ff0000/ffff00?font=playfair-display&text=®"></td>
            </tr>
        </table>
    </form>
</body>

</html>
Ответить с цитированием
  #6 (permalink)  
Старый 11.12.2021, 21:39
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

Дорогой Рони, я не сомневался в вашем высокопрофессионализме!
ИСКРЕННЕ БЛАГОДАРЮ!!!
Ответить с цитированием
  #7 (permalink)  
Старый 16.12.2021, 13:23
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

Уважаемый Рони, пожалуйста, ещё подскажите или дайте хотя бы ссылку на то, как сделать так, чтобы, например, в результате перемещений изображений кликами до необходимого образца появилось сообщение, что результат достигнут... Please!))

Последний раз редактировалось Борис К, 16.12.2021 в 13:27.
Ответить с цитированием
  #8 (permalink)  
Старый 16.12.2021, 14:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Борис К,
массив эталона, проверить в строке 33 с текущей позицией.
условно ...
let end = arr.every((src, i) => imgs[i].src == src);
if(end) alert("результат достигнут");
Ответить с цитированием
  #9 (permalink)  
Старый 18.12.2021, 13:02
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

Рони, только не кидайте в меня тапками... не осилил, не справился, запутался в сумраке ночей(((((
Что-то совсем не доходит, куда вставить этот код в вашем варианте моего примера:
Сообщение от рони
let end = arr.every((src, i) => imgs[i].src == src);
if(end) alert("результат достигнут");
Видимо, без вашей обстоятельной помощи никак... уж, извините)
Пожалуйста!
Ответить с цитированием
  #10 (permalink)  
Старый 18.12.2021, 13:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Борис К,
массив напишите что у вас там ["S", ] и размерность 3 x 4 или разное
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скачивание массива изображений MC-XOBAHCK Общие вопросы Javascript 13 14.02.2019 11:03
DLE загрузка изображений через дополнительное поле armn555 Элементы интерфейса 0 18.08.2017 11:08
jquery-gp-gallery.js - разное отображение подгружаемых изображений frutality jQuery 1 09.09.2012 18:15
Повременная смена изображений jozev Элементы интерфейса 2 01.08.2011 18:43
Прокрутка изображений gen552 Элементы интерфейса 6 01.04.2011 13:11