Javascript.RU

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

Aetae, Рони, тока не кидайте в меня тэгами тапками в это морозное воскресное утро!
Но возможно ли в принципе сделать так, чтобы в последнем коде на этой страничке 10-я строка (<img id="pic"></img>) была заменена следующей таблицей с отправкой к стилям?
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <style type="text/css">
        [data-id="1"] {
            background-image:url(...);
   width:150px;
   height:150px;
   background-position:0px 0px
}
        [data-id="2"] {
            background-image:url(...);
   width:150px;
   height:150px;
   background-position:150px 300px
}
        [data-id="3"] {
            background-image:url(...);
   width:150px;
   height:150px;
   background-position:0px 150px
}
        [data-id="4"] {
            background-image:url(...);
   width:150px;
   height:150px;
   background-position:150px 150px
}
    </style>
</head>
<body>
        <table align="center" cellspacing="0" cellpadding="0">
            <tr>
                <td data-id="1"></td>
                <td data-id="2"></td>
            </tr>
            <tr>
                <td data-id="3"></td>
                <td data-id="4"></td>
            </tr>
        </table>
</body>
</html>

Ответить с цитированием
  #22 (permalink)  
Старый 06.02.2022, 08:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Борис К,
вопрос не понимаю, нафига тогда огород с канвас городили, если вернулись к тому что было?
Ответить с цитированием
  #23 (permalink)  
Старый 06.02.2022, 12:25
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

Рони, на первый взгляд, видимо, может показаться, что затея "огород с канвас" бессмысленна, но дело меняется, если посмотреть на таблицу, например, с большим количеством ячеек, которыми в дальнейшем можно интерактивно манипулировать.
Если это очень сложно реализовать, ну, тогда...
В любом случае представленное решение на мой первый вопрос несомненно очень кстати, супер... Спасибо огромное!
Ответить с цитированием
  #24 (permalink)  
Старый 06.02.2022, 13:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от Борис К
Если это очень сложно реализовать, ну, тогда...
Сообщение от Борис К
Но возможно ли в принципе сделать так,
... ещё бы знать, о чём это?)))

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

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

Последний раз редактировалось Борис К, 06.02.2022 в 17:37.
Ответить с цитированием
  #26 (permalink)  
Старый 06.02.2022, 19:42
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

Сообщение от Борис К
Очень жаль, если такое невозможно реализовать(((
Все можно.
Переделал слегка пример Рони
Вверху 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>
Ответить с цитированием
  #27 (permalink)  
Старый 06.02.2022, 20:36
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от Борис К
из 16-ти маленьких исходных изображений
Сообщение от Борис К
представить, например, девятью ячейками таблицы
Чел, что с логикой, как 16 стало 9? Чекни мой пазл лучше, без канвас и таблиц, чисто на дивах, реально.

Последний раз редактировалось Rise, 06.02.2022 в 20:44.
Ответить с цитированием
  #28 (permalink)  
Старый 06.02.2022, 21:49
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

Сообщение от Rise
Чел, что с логикой, как 16 стало 9?

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

Voraa, Вы правильно поняли мой вопрос и отлично справились, но немного изменили код в моём примере на этой страничке, а это мне помешает самостоятельно реализовать то, что уже имелось для полного замысла... но тем не менее моя Вам искренняя благодарность!))
Поясню своё полное видение:
1. Из 16 маленьких изображений генерируется одно большое изображение цельным jpg (это уже реализовано - представлено Aetae и модифицировано Рони).
2. Одновременно большое изображение должно разделится, например, на 9 частей-квадратиков (реализовано Вами) и перемешатся (имеется уже готовое решение).
3. Клики по соседним квадратикам должны их менять местами... и так до результата первоначально сгенерированного большого изображения.
Ответить с цитированием
  #30 (permalink)  
Старый 07.02.2022, 07:15
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

Сообщение от Борис К
Поясню своё полное видение:
Вам дали подсказки.
Как из нескольких изображений сделать одно.
Как снова разделить это изображение на другое количество частей и вставить их как фон на элементы.

Ваше видение вы должны сами реализовывать.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DLE загрузка изображений через дополнительное поле armn555 Элементы интерфейса 0 18.08.2017 11:08
Ajax. Как сделать загрузку изображений, отображение, удаление как на Авито wowtschuk AJAX и COMET 1 07.03.2017 01:34
Повременная смена изображений jozev Элементы интерфейса 2 01.08.2011 18:43
Прокрутка изображений gen552 Элементы интерфейса 6 01.04.2011 13:11
Скролл мини изображений I-Trap Элементы интерфейса 1 25.11.2009 22:03