Можете ли вы наложить фотографии друг на друга на веб-странице? - PullRequest
11 голосов
/ 27 июня 2011

Я хочу создать веб-сайт, представляющий собой игру "наряжаться", в которой вы можете нажимать на различные аксессуары, и они будут накладываться друг на друга.

Поскольку это немного сложно описать, я нашел следующие примеры, которые, надеюсь, должны подчеркнуть то, что я пытаюсь сделать:

У меня есть сотни различных аксессуаров в качестве изображений прямо сейчас, и (подобно игре выше) мне нужно поддерживать возможность выбирать более одного. Поэтому мне нужно решение, которое не требует, чтобы я предварительно сохранял изображение каждого проникновения комбинаций аксессуаров поверх принцессы (так как это были бы миллионы предопределенных изображений).

В идеале я хотел бы получить решение Javascript / jQuery или CSS, но приму любые предложения, которые есть у людей. Также могут быть полезны Flash-предложения.

Итак, мои вопросы:

  • Как на приведенном выше примере сайта выложены все изображения друг на друга? Я не могу найти какой-либо код CSS или Javascript, который делает это?
  • Есть ли какие-либо предложения по созданию такого типа веб-сайта (ссылки, учебные пособия или примеры кода были бы хорошими)?

Ответы [ 7 ]

58 голосов
/ 02 июля 2011

Короткий ответ - да.

Есть много способов справиться с этим. С HTML / CSS вы можете легко бросать элементы друг на друга.

HTML:

<img id="imga" src="img1.png"/>
<img id="imgb" src="img2.png"/>
<img id="imgc" src="img3.png"/>

CSS:

img
{
    position:absolute;
    top: 0px;
    left: 0px;
}

Итак, давайте посмотрим, что здесь важно. В вашем HTML-документе 3 изображения (imga, imgb и imgc). Чтобы наложить их, вы должны сначала установить для их position значение absolute , чтобы изображения игнорировали любое поведение макета по умолчанию. Затем вы можете использовать свойства left и top для определения координат x, y элементов img соответственно. В приведенном выше примере все элементы наложены в верхнем левом углу страницы. Чтобы определить, какое изображение окажется сверху, вы можете использовать свойство z-index следующим образом:

#imga
{
z-index: 10;
}

#imgb
{
z-index: 20;
}

#imgc
{
z-index: 30;
}

Это заставит imgc появиться впереди, imgb появится позади imgc и imga позади всего остального. Свойство z-index определяет, какой элемент находится перед другим. Элемент с наибольшим z-index идет сверху, затем следует второй по величине и т. Д.

Для вашего проекта мы можем немного изменить приведенный выше код:

HTML

<img id="layer1" src="img1.png"/>
<img id="layer2" src="img2.png"/>
<img id="layer3" src="img3.png"/>

CSS

img
{
position:absolute;
top: 0px;
left: 0px;
}
#layer1
{
   z-index: 10;
}
#layer2
{
z-index: 20;
}

#layer3
{
z-index: 30;
}

Поскольку теперь вы понимаете, что лежит где, вы знаете, что layer3 находится сверху (слой с аксессуарами), layer2 находится посередине (ваша персона). и layer1 находится внизу (фон). Тогда вы можете создать аксессуары, например, так:

<img src="accessory1.png" onClick="setAccessory('accessory1.png');"/>

И затем, используя javascript, вы можете установить src первого слоя равным нажатию аксессуара.

function setAccessory(path){
     document.getElementById('layer1').src = path;
     //if you're using jQuery, $("#layer1").attr("src", path);
}

Вы можете создать столько аксессуаров, сколько захотите. Скажем, вы хотите добавить больше аксессуаров поверх вашей личности, тогда вы можете легко создавать больше слоев, назначать их z-индексы (и даже делать это динамически, используя javascript, как здорово!)

В заключение, надеюсь, вы нашли этот небольшой урок полезным. Для ваших целей я предлагаю взглянуть на jQuery, а также на элемент. Их будет интересно использовать и, безусловно, они помогут вашему приложению.

Удачи с вашим приложением.

6 голосов
/ 02 июля 2011

Если вы ищете решение, которое требует меньше кода, попробуйте следующее:

  1. Создайте свое искусство в фотошопе, с каждым аксессуаром на отдельном слое
  2. Сохраните каждый слой какотдельное изображение.Убедитесь, что все изображения сделаны в полном размере, и используйте прозрачность.Сохранить как PNG-24.Таким образом, положение каждого аксессуара будет «жестко закодировано» на изображениях, поэтому вам не нужно обрабатывать его в коде.
  3. Создайте контейнер <div> и присвойте ему position: relative;.
  4. Поместите все изображения внутри этих <div>, как <img>, в правильном порядке (сложите слои, фоновое изображение будет первым)
  5. Примените position: absolute; на каждом<img>.

Это должно помочь вам начать.Затем используйте jQuery для переключения каждого изображения при нажатии кнопок, представляющих их.

6 голосов
/ 27 июня 2011

Вам нужно будет использовать комбинацию позиции: абсолютная с заданными верхними и левыми позициями, а также z-индексы, чтобы контролировать, какие элементы появляются сверху.

2 голосов
/ 05 июля 2011

CSS3 поддерживает несколько фоновых слоев

#example1 {
  width: 500px;
  height: 250px;
  background-image: url(sheep.png), url(betweengrassandsky.png);
  background-position: center bottom, left top;
  background-repeat: no-repeat;
}
2 голосов
/ 03 июля 2011

Используя анимации jQuery, вы можете создавать «перетаскиваемые» изображения. Дайте вашим изображениям событие onmousedown, которое запускает функцию, которая перемещает ваше изображение X по горизонтали и Y по вертикали в зависимости от текущего местоположения мыши. Проверьте эту ссылку, чтобы узнать, как найти местоположение мыши с помощью jQuery. http://docs.jquery.com/Tutorials:Mouse_Position

Или, что еще лучше, установите плагин jQuery UI «droppable», который позволяет легко перетаскивать любые элементы. http://jqueryui.com/demos/droppable/

2 голосов
/ 27 июня 2011

Я хотел бы изучить использование тегов <canvas> и API.

Это позволяет легко позиционировать элементы и изображения, даже если вы используете новый браузер, выполучит преимущество аппаратного ускорения, которое ускорит все это.

Для обратной совместимости в IE вам потребуется использовать плагин Google Explorer Canvas javascript.

1 голос
/ 27 июня 2011

Используя комбинацию свойств CSS, вы можете достичь того, что вам нужно.

Чтобы расположить аксессуары в правильном месте, вы можете установить абсолютное положение и использовать абсолютные координаты, чтобы указать их положение.

Чтобы установить порядок, в котором они отображаются, вы можете использовать свойство z-index, чтобы «сложить» их.

Проверить:

http://www.html.net/tutorials/css/lesson15.php

Для получения более подробной информации об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...