Вход

Просмотр полной версии : Найти образец


Борис К
08.07.2023, 08:59
Здравствуйте, JS-уникумы! :victory:
Ищу адекватное решение своей наивной затее, поэтому, если кому не лень, то подскажите вариант в следующем простом примере: в качестве образца представлен блок div с временной серой заглушкой, в котором в последующем должно отображаться одно из случайных изображений данных td таблицы table. Далее при клике на изображении в таблице по образцу div'а на странице должен появиться alert "OKl!", а при неправильном выборе alert "Wrong". Пока так...
P.S. В состоянии самостоятельно сделать подобное крайне корявыми устаревшими средствами, поэтому буду рад любым современным решениям!
*Чем бы дитя не тешилось :write: , лишь бы не плакало*

<html>
<head>
<style>
div, td {
width: 100px;
height: 100px;
}
[data-id="red"] {
background-color: red;
}
[data-id="yellow"] {
background-color: yellow;
}
</style>

<script type="text/javascript">
window.addEventListener("DOMContentLoaded", () => {
const tbl = document.querySelector('table');
const td = [...document.querySelectorAll('td')];

let win;

td.sort(() =>Math.round(Math.random())-0.5);
tbl.rows[0].innerHTML = '';
tbl.rows[0].append(...td.slice(0, 2));

//alert ("Wrong!")
if (win) alert("OK!");

})
</script>
</head>
<body>
<div><img src="https://via.placeholder.com/100x100.png"></div>

<br /><br /><br />

<table>
<tr>
<td data-id="red"></td>
<td data-id="yellow"></td>
</tr>
</table>

</body>
</html>

Всем хорошего настроения!

рони
08.07.2023, 10:22
Борис К,
<!DOCTYPE HTML>
<html>

<head>
<meta charset="utf-8">
<style>
td,
div.show {
width: 100px;
height: 100px;
}

div.show {
transition: 1s;
background-size: 200px;
background-position: -50px;
}

[data-id="1"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=1);
}

[data-id="2"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=2);
}

[data-id="3"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=3);
}

[data-id="4"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=4);
}

[data-id="5"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=5);
}

[data-id="6"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=6);
}
</style>
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", () => {
const tab = document.querySelector('table');
const cells = document.querySelectorAll('td');
const len = cells.length;
const img = document.querySelector('.show');
let id = 0,
i;

function showImg() {
do {
i = Math.trunc(Math.random() * len);
i = cells[i].dataset.id;
} while (i == id);
id = i;
img.dataset.id = id;
}

tab.addEventListener('click', ({
target
}) => {
if (target = target.closest('[data-id]')) {
const curid = +target.dataset.id;
let win = curid == id;
let txt = win ? 'OK!' : 'Wrong!';
alert(txt);
if (win) showImg();
}
});
showImg();

});
</script>
</head>

<body>
<div class="show"></div>
<table>
<tr>
<td data-id="1"></td>
<td data-id="2"></td>
<td data-id="3"></td>
</tr>
<tr>
<td data-id="4"></td>
<td data-id="5"></td>
<td data-id="6"></td>
</tr>
</table>
</body>

</html>

Борис К
08.07.2023, 11:21
Рони, просто здорово всё! :dance:
:thanks: :thanks: :thanks:
P.S. Возможно, ещё что-нибудь надумаю спросить... так что, извините!))

Борис К
10.07.2023, 09:47
Здравствуйте, Рони! :victory:
Экспериментируя :write: , дополнил ваш код ещё таблицей и стилем с изображениями букв, используя скрипт jQuery для рандомного выбора по кнопке таблицы только с цифрами или только с буквами, но сам понимаю, что это всё коряво налеплено и просто "смешно" :cray:
Возможно ли подобное адекватно реализовать с помощью чистого JS?

voraa
10.07.2023, 10:05
Все, что делается на jquery можно написать на чистом js

Борис К
10.07.2023, 10:13
Voraa, да, мне как раз откликнулись ваши слова про устаревшее jQuery, поэтому проявил интерес к лаконичному pure JS :write:

рони
10.07.2023, 15:31
рандомного выбора по кнопке таблицы только с цифрами или только с буквами
<!DOCTYPE HTML>
<html>

<head>
<meta charset="utf-8">
<style>
td,
div.show {
width: 100px;
height: 100px;
}

div.show {
transition: 1s;
background-size: 200px;
background-position: -50px;
}

[data-id="1"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=1);
}

[data-id="2"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=2);
}

[data-id="3"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=3);
}

[data-id="4"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=4);
}

[data-id="5"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=5);
}

[data-id="6"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=6);
}
.letter [data-id="1"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=a);
}

.letter [data-id="2"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=b);
}

.letter [data-id="3"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=c);
}

.letter [data-id="4"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=d);
}

.letter [data-id="5"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=e);
}

.letter [data-id="6"] {
background-image: url(https://placehold.co/100x100/ffffff/3a3b3c?font=playfair-display&text=f);
}
</style>
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", () => {
const tab = document.querySelector('table');
const cells = document.querySelectorAll('td');
const len = cells.length;
const img = document.querySelector('.show');
let id = 0,
i;

function showImg() {
do {
i = Math.trunc(Math.random() * len);
i = cells[i].dataset.id;
} while (i == id);
id = i;
img.dataset.id = id;
}

tab.addEventListener('click', ({
target
}) => {
if (target = target.closest('[data-id]')) {
const curid = +target.dataset.id;
let win = curid == id;
let txt = win ? 'OK!' : 'Wrong!';
alert(txt);
if (win) showImg();
}
})
showImg();
function toggleLetter()
{
document.body.classList.toggle('letter', Math.random() > .5)
}
toggleLetter();
btn.addEventListener('click', toggleLetter)
});
</script>
</head>

<body>
<div class="show"></div>
<table>
<tr>
<td data-id="1"></td>
<td data-id="2"></td>
<td data-id="3"></td>
</tr>
<tr>
<td data-id="4"></td>
<td data-id="5"></td>
<td data-id="6"></td>
</tr>
</table>
<button id="btn">random letter/number</button>
</body>

</html>

Борис К
10.07.2023, 20:14
Восхитительно! :dance:
Какие возможности, какие способности! :write:
Рони, огромная благодарность за полезные знания!
:thanks: :thanks: :thanks: