Javascript.RU

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

Сообщение от voraa
Зачем для каждого квадрата в css указывать width и height? Разве они могут отличаться?
Достаточно создать одно правило для всех квадратов (через класс и атрибут) и там указать ширину и высоту
Да, бесспорно! Но вопрос в том, как в массиве JS указать путь к стилям... например, я хочу, чтобы вместо реального изображения был красный квадратик, как я описал выше, созданный стилем:
Сообщение от Борис К
background-color: #ff0000;
            width: 150px;
            height: 150px;
P.S. Извините, если туманно изъясняюсь
Ответить с цитированием
  #82 (permalink)  
Старый 29.06.2023, 13:40
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Я не вижу всей задачи.
Как вариант, если это то, о чем я думаю, то в массиве надо указывать не только значение, но и свойство стиля.
const images = [
            ['backgroundImage',"url(https://loremflickr.com/150/150/girl?random=1)"],
            ['backgroundImage',"url(https://loremflickr.com/150/150/dog?random=2)"],
            ['bacgroundColor', "red"],
            ['backgroundImage',"url(https://loremflickr.com/150/150/kitten?random=4)"]
        ];

и задавать стиль
elem.style[Images[k][0]] = Images[k][1];
Ответить с цитированием
  #83 (permalink)  
Старый 29.06.2023, 13:46
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Как вариант, оставить, как у вас, но проверять, что в строке. Скажем если строка содержит "/", то это url и тогда устанавливать картинку. А если нет, то это - цвет.

Если надо установить только один раз и не менять потом, то можно строку задания картинки указывать c url(...) и просто
elem.style.background = Image[k]
При задании обобщенного свойства background браузер сам разбирается, что там цвет или картинка

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

Сообщение от voraa
Я не вижу всей задачи.
Voraa, я максимально упростил код представленный выше до сути настоящего вопроса:
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8">
    <style type="text/css">
[data-id="red"] {
 height: 100px;
 width: 100px;
 border-top: 30px solid #ff0000;
 border-right: 30px solid #ff0000;
 border-bottom: 30px solid #ff0000;
 border-left: 30px solid #ff0000;
}

[data-id="blue"] {
 height: 100px;
 width: 100px;
 border-top: 30px solid #0000ff;
 border-right: 30px solid #0000ff;
 border-bottom: 30px solid #0000ff;
 border-left: 30px solid #0000ff;
}                    
    </style>
</head>
<body>
    <script>
        function shuffle(array) {
            return array;
        }
        const x = 150;
        const y = 150; 
        const w = 2; 
        const images = [
            "https://loremflickr.com/150/150/girl?random=1",
            "https://loremflickr.com/150/150/dog?random=1",
            "https://loremflickr.com/150/150/car?random=1",
            "https://loremflickr.com/150/150/kitten?random=1"
        ];
        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) => Object.assign(new Image(), {
                    src,
                    onload
                })
            ).then(({
                target
            }) => {
                const hPos = Math.floor(i / w);
                const wPos = i - (hPos * w);
                ctx.drawImage(
                    target,
                    wPos * x,
                    hPos * y,
                    x,
                    y
                )
            }))
        );
        createImg()
    </script>
</body>
</html>

Теперь, например хотелось бы, чтобы в массиве скрипта вместо двух изображений были две рамочки ([data-id="red"] и [data-id="blue"] , которые прописаны в стилях.
Ответить с цитированием
  #85 (permalink)  
Старый 29.06.2023, 17:41
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Нет. Рамочки с границами в canvas перенести не удастся.
Либо делать картинки, как просто прямоугольники нужного цвета, либо вручную рисовать прямоугольники в canvas.
Ответить с цитированием
  #86 (permalink)  
Старый 29.06.2023, 18:08
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

Понял. А то я уже нафантазировал всякого по незнанию((
Voraa, спасибо Вам за помощь и полезную информацию!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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