jQuery - динамическая разметка экранных потоков

Мне нужно создать динамический HTML-макет, который будет содержать телефонные фреймы с различной ориентацией, которые соединены горизонтальными или вертикальными линиями. Линии должны быть центрированы относительно кадров. Также каждый кадр будет содержать свою метку.

HTML-код:

<div class="flow-canvas">
            <div class="device-frame portrait" data-next="landscape">
                 <div class="screen-wrapper">
                    1
                    <div class="label">screen label</div>
                 </div>
            </div>
            <div class="device-frame landscape" data-next="portrait" data-prev="portrait">
                 <div class="screen-wrapper">
                    2
                    <div class="label">screen label</div>
                 </div>   
            </div>
            <div class="device-frame portrait" data-next="portrait" data-prev="landscape">
                <div class="screen-wrapper">
                    3
                    <div class="label">screen label</div>
                </div>
            </div>
            <div class="device-frame portrait" data-next="portrait" data-prev="portrait">
                <div class="screen-wrapper">
                     4   
                     <div class="label">screen label</div>
                </div>
            </div>
            <div class="device-frame portrait"  data-next="portrait" data-prev="portrait">
                <div class="screen-wrapper">
                    5
                    <div class="label">screen label</div>       
                </div>
            </div>
            <div class="device-frame portrait" data-next="portrait" data-prev="portrait">
                <div class="screen-wrapper">
                    6
                    <div class="label">screen label</div>   
                </div>
            </div>
            <div class="device-frame portrait" data-next="portrait" data-prev="portrait">
                 <div class="screen-wrapper">
                    7
                    <div class="label">screen label</div>
                 </div>   
            </div>
            <div class="device-frame portrait" data-next="portrait" data-prev="portrait"> 
                <div class="screen-wrapper">
                    8
                    <div class="label">screen label</div>
                </div>
            </div>
            <div class="device-frame portrait"  data-prev="portrait">
                <div class="screen-wrapper">
                    9

                </div>
            </div>
        </div>

JQuery

function drawFlow() {
    $('.flow-canvas').each(function () {
        var parentDiv = $(this);
        parentDiv.width("100%");
        var parentDivWidth = parseInt(parentDiv.width());
        $('.device-frame:last-child', parentDiv).addClass('last');
        $('.device-frame:first-child', parentDiv).addClass('first');
        var screens = $('.device-frame', parentDiv);
        var screenWidth = parseInt($('.device-frame', parentDiv).css('width')) + parseInt($('.device-frame', parentDiv).css('margin-left')) + parseInt($('.device-frame', parentDiv).css('margin-right'));
        var lisInRow = Math.floor(parentDivWidth / screenWidth);
        parentDiv.css('width', lisInRow * screenWidth);
        var rowIndex = 1;
        for (var i = 0; i < screens.length; i += lisInRow) {

            if (rowIndex % 2 == 0) {
                screens.slice(i, i + lisInRow).attr('data-row', 'even').attr('data-order', '');
            } else {
                screens.slice(i, i + lisInRow).attr('data-row', 'odd').attr('data-order', '');
            }
            $(screens[i]).attr('data-order', 'first-in-row');
            $(screens[i + lisInRow - 1]).attr('data-order', 'last-in-row');
            rowIndex++;
        }

    })
}

ДЕМО. Если вы измените размер окна результатов и обновите страницу, вы увидите уродливый макет. Есть несколько проблем, которые я не могу решить: 1. Как я могу центрировать вертикальные и горизонтальные линии, связанные с ориентацией кадра? 2. как я могу центрировать надписи, связанные со строками? 3. в хроме линии иногда перекрывают метку. Я думаю, что эта проблема вызвана из-за float: left стиль и :before а также :after поведение псевдоэлементов.

Если это глупое решение, пожалуйста, предложите мне другое.

0 ответов

Другие вопросы по тегам