
06.02.2022, 12:25
|
Кандидат Javascript-наук
|
|
Регистрация: 22.02.2017
Сообщений: 145
|
|
Рони, на первый взгляд, видимо, может показаться, что затея "огород с канвас" бессмысленна, но дело меняется, если посмотреть на таблицу, например, с большим количеством ячеек, которыми в дальнейшем можно интерактивно манипулировать.
Если это очень сложно реализовать, ну, тогда...
В любом случае представленное решение на мой первый вопрос несомненно очень кстати, супер... Спасибо огромное!
|
|

06.02.2022, 13:46
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,136
|
|
Сообщение от Борис К
|
Если это очень сложно реализовать, ну, тогда...
|
Сообщение от Борис К
|
Но возможно ли в принципе сделать так,
|
... ещё бы знать, о чём это?)))
Последний раз редактировалось рони, 06.02.2022 в 14:08.
|
|

06.02.2022, 17:34
|
Кандидат Javascript-наук
|
|
Регистрация: 22.02.2017
Сообщений: 145
|
|
Рони, возможно, я слишком туманно изьясняюсь... уж извините!)
Смотрите, например, из 16-ти маленьких исходных изображений можно сгенерировать одно большое, которое отражается в <img id="pic"></img>, что и было уже Вами представлено в конечном результате - просто отлично получилось!
Теперь это изображение нужно как-то представить, например, девятью ячейками таблицы, чтобы в дальнейшем можно было их перемещать кликами между собой после рандомной перетасовки до первоначально сгенерированного вида.
Очень жаль, если такое невозможно реализовать(((
Хотя мне казалось, что средствами Java Script невозможно и картинку сгенерировать из других... и, о, чудо чудесное! 
Последний раз редактировалось Борис К, 06.02.2022 в 17:37.
|
|

06.02.2022, 19:42
|
 |
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,759
|
|
Сообщение от Борис К
|
Очень жаль, если такое невозможно реализовать(((
|
Все можно.
Переделал слегка пример Рони
Вверху canvas. Внизу таблица с перенесенным в ячейки изображение из канвас
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
td {
width:100px;
height:100px;
}
</style>
</head>
<body>
<br>
<br>
<table>
<tr>
<td></td><td></td><td></td>
</tr>
<tr>
<td></td><td></td><td></td>
</tr>
<tr>
<td></td><td></td><td></td>
</tr>
</table>
<button id="btn">Shuffle</button>
<script>
// функция перемешивающая массив
function shuffle(array) {
let i = array.length;
while (i--) {
let j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
// функция добавляющая картинку на страницу
function toImage(canvas, type) {
pic.src = canvas.toDataURL(type)
}
const x = 150; // ширина одного
const y = 150; // высота одного
const w = 2; // сколько в ряду
// картинки, должны быть на том же домене или иметь Access-Control-Allow-Origin
const images = [
"https://picsum.photos/seed/aaa/150",
"https://picsum.photos/seed/bbb/150",
"https://picsum.photos/seed/ccc/150",
"https://picsum.photos/seed/ddd/150"
];
const h = Math.ceil(images.length / w); // сколько в столбце
const canvas = Object.assign(document.createElement('canvas'), {
width: w * x,
height: h * y
});
document.body.prepend(canvas);
const ctx = canvas.getContext('2d');
const createImg = () => Promise.all(
shuffle(images).map((src, i) => new Promise(
(onload, onerror) => Object.assign(new Image(), {
crossOrigin: 'anonymous',
src,
onerror,
onload
})
).then(({target}) => {
const hPos = Math.floor(i / w);
const wPos = i - (hPos * w);
ctx.drawImage(
target,
wPos * x,
hPos * y,
x,
y
)
}))
).then(() => {
// toImage(canvas, 'image/jpeg');
const url = canvas.toDataURL('image/jpeg')
let x =0;
const tb = document.querySelector ('table')
for (let i = 0; i< tb.rows.length; i++) {
for (let j = 0; j< tb.rows[i].cells.length; j++) {
tb.rows[i].cells[j].style.backgroundImage = `url(${url})`;
tb.rows[i].cells[j].style.backgroundPosition = `${-j*100}px ${-i*100}px`;
}
}
});
btn.addEventListener('click', createImg);
createImg()
</script>
</body>
</html>
|
|

06.02.2022, 20:36
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 456
|
|
Сообщение от Борис К
|
из 16-ти маленьких исходных изображений
|
Сообщение от Борис К
|
представить, например, девятью ячейками таблицы
|
Чел, что с логикой, как 16 стало 9? Чекни мой пазл лучше, без канвас и таблиц, чисто на дивах, реально.
Последний раз редактировалось Rise, 06.02.2022 в 20:44.
|
|

06.02.2022, 21:49
|
Кандидат Javascript-наук
|
|
Регистрация: 22.02.2017
Сообщений: 145
|
|
Сообщение от Rise
|
Чел, что с логикой, как 16 стало 9?
|
Да нет, всё логично по задумке - выше Voraa вроде правильно понял...
Поясню:
1. Из 16 маленьких изображений генерируется одно большое изображение цельным jpg (это уже реализовано - представлено Aetae и модифицировано Рони).
2. Одновременно большое изображение должно разделится, например, на 9 частей-квадратиков (Voraa разделил) и перемешатся .
3. Клики по соседним квадратикам должны их менять местами... и так до результата первоначально сгенерированного большого изображения.
Сообщение от Rise
|
Чекни мой пазл лучше, без канвас и таблиц, чисто на дивах, реально.
|
За пазл без jQuery, конечно, спасибо! Очень интересное решение)))
|
|

06.02.2022, 22:02
|
Кандидат Javascript-наук
|
|
Регистрация: 22.02.2017
Сообщений: 145
|
|
Voraa, Вы правильно поняли мой вопрос и отлично справились, но немного изменили код в моём примере на этой страничке, а это мне помешает самостоятельно реализовать то, что уже имелось для полного замысла... но тем не менее моя Вам искренняя благодарность!))
Поясню своё полное видение:
1. Из 16 маленьких изображений генерируется одно большое изображение цельным jpg (это уже реализовано - представлено Aetae и модифицировано Рони).
2. Одновременно большое изображение должно разделится, например, на 9 частей-квадратиков (реализовано Вами) и перемешатся (имеется уже готовое решение).
3. Клики по соседним квадратикам должны их менять местами... и так до результата первоначально сгенерированного большого изображения.
|
|

07.02.2022, 07:15
|
 |
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,759
|
|
Сообщение от Борис К
|
Поясню своё полное видение:
|
Вам дали подсказки.
Как из нескольких изображений сделать одно.
Как снова разделить это изображение на другое количество частей и вставить их как фон на элементы.
Ваше видение вы должны сами реализовывать.
|
|

07.02.2022, 14:20
|
Кандидат Javascript-наук
|
|
Регистрация: 22.02.2017
Сообщений: 145
|
|
Сообщение от voraa
|
Вам дали подсказки.
|
Да, и я искренне благодарен абсолютно всем за них... огромное спасибо!
Сообщение от voraa
|
Как из нескольких изображений сделать одно.
|
Без сомнений я получил отличное готовое решение!
Сообщение от voraa
|
Как снова разделить это изображение на другое количество частей и вставить их как фон на элементы.
|
Потом зародилась и такая мысль))
Сообщение от voraa
|
Ваше видение вы должны сами реализовывать.
|
К сожалению, я очень далёк от программирования, но я буду по мере своих возможностей разбираться...
Voraa, спасибо Вам!
|
|

07.02.2022, 19:49
|
Кандидат Javascript-наук
|
|
Регистрация: 22.02.2017
Сообщений: 145
|
|
Rise, это пока не игра... ведь решение мной так и не найдено(((
А так, то был замысел сделать что-нибудь среднее по трудности для умственно отсталого ребенка на компьютере...
P.S. Я совсем не программист, просто когда-то немного знакомился с веб-технологиями в качестве хобби, но теперь вижу, что язык JS в составе HTML5 ушёл далеко вперёд... и я глубоко восхищён высокопрофессионализмом людей на этом ресурсе, владеющим современным JS!
|
|
|
|