Как лучше сверстать страницу с картинкой окна?

Рейтинг: 1Ответов: 1Опубликовано: 06.12.2014

Есть страница http://its116.ru/include/zorge_fl_14a.html , в нее нужно вставить картинку окна (http://s7.hostingkartinok.com/uploads/images/2014/12/75da015ed75548f368c897dd2db986d3.jpeg) таким образом, чтобы было вот так http://s7.hostingkartinok.com/uploads/images/2014/12/1fc78ff8c5dcd26355a179e80c15c053.png

Как это лучше сверстать?

Ответы

▲ 2Принят

-1- Пример реализации с использованием js: jsFiddle

HTML

<div class="building"></div>

CSS

.building {
    background-color: grey;
    width: 150px;
    height: 150px;
    position: absolute;
    top: 125px;
    left: 125px;
}

.window {
    width: 101px;
    height: 120px;
    background-image: url(http://its116.ru/upload/i.jpeg);
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
    position: absolute;
    z-index: 1;
}

JS

function first_building_windows() {
    return [
        {coords: [50, 25], href: 'http://ya.ru'},
        {coords: [250, 25], href: 'http://google.ru'},
        {coords: [50, 250], href: 'http://mail.ru'},
        {coords: [250, 250], href: 'http://yahoo.ru'}
    ];
}

// remove it if not needed
function append_window_to_body(window_element) {
    var window_container = document.body;
    window_container.appendChild(window_element);
}

// remove it if not needed
function append_window(window_element) {
    var window_container = document.getElementById('window-container');
    if (!window_container) {
        window_container = document.createElement('div');
        window_container.id = "window-container";
        document.body.appendChild(window_container);
    }
    window_container.appendChild(window_element);
}

function create_window(window_info) {
    // creates window element
    var window_element = document.createElement('a');
    window_element.className = 'window';

    // sets window position
    var window_position = window_info['coords'];
    window_element.style.left = window_position[0] + "px";
    window_element.style.top = window_position[1] + "px";

    // sets window link
    window_element.href = window_info['href'];
    return window_element;
}

function draw_window(window_info) {
    var window_element = create_window(window_info);
    append_window(window_element); // creates a window container
    //append_window_to_body(window_element); // do not create any containers
}

function building_windows(window_list) {

    window_list.forEach(function(current_window) { draw_window(current_window); })
}

jQuery(document).ready(function() {
    building_windows(first_building_windows());
});

"окна" можно добавлять прямо в body, пример этого показан в функции append_window_to_body. Либо создавать (что предпочтительнее) контейнер, который будет эти "окна" содержать (см. функцию append_window).

Эти две функции (append_window_to_body и append_window) добавлены для примера. Можно выбрать одну из них и удалить другую.

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

Я исходил из того, что рисоваться окна будут только один раз - в момент загрузки страницы. Если же необходимо будет несколько раз вызывать отрисовку всех окон без перезагрузки страницы, тогда надо будет предусмотреть очистку отрисованных ранее окон (как вариант - $('a.window').remove()).

-2- У вас проблема была с тем, что вы пытались отобразить окна еще до создания страницы (точнее - до ее полной загрузки, когда не все элементы страницы существовали). Чтобы это исправить, достаточно просто отображать окна после загрузки страницы (у вас даже пример уже есть на странице - jQuery(document).ready()). На всякий случай я обернул запуск отрисовки окон в jQuery, поэтому если вы просто скопируете код - ничего не должно будет сломаться.

Еще одна проблема - не подгрузились стили для "окон" (хотя может быть вы их просто еще не добавили)

-3- Я бы посоветовал вам поизучать JS, хотя бы немного. Добавление той же ссылки для каждого окна - задача не сложная. Понимание причин вашей ошибки вообще является самой основой. Аналогично, многие косметические операции будут быстрее выполняться, если вы будете иметь некоторое представление о языке.