Извините, это будет немного длинно ...
Немного контекста
В рамках более крупного проекта я пытаюсь создать временную шкалу проекта для включения ввеб-страница, используемая для дистанционного управления музыкальной программой (называемой Reaper для тех, кто заинтересован).Я пытаюсь заставить его отображать текущую игровую позицию, маркеры проекта и регионы проекта.Все это подается прямо из API программы, без проблем получая информацию.Для начала я просто пытаюсь отобразить маркеры проекта, однако я уже больше недели тяну свои волосы, пытаясь заставить их работать.
Вот быстрый скриншот из программного обеспечения для иллюстрациито, что я пытаюсь эмулировать: screencap линейки Reaper
Обычно я бы использовал индикатор выполнения для чего-то вроде этого, или один из тысяч примеров из Интернета, однако у меня нетспособ узнать длину проекта, поскольку программное обеспечение не ограничивает его.В результате я вернулся к использованию фиксированной шкалы в 10 пикселей на бар.Вроде произвольно, я выбрал это, так как это оптимально для 5-минутной песни при 120 ударов в минуту.Не слишком волнуюсь по поводу внешнего вида на данный момент, я просто хочу заставить его работать, ха-ха.
Проблема, которая у меня есть (код включен внизу), заключается в том, что я использую абсолютное позиционирование для маркеров вЧтобы выровнять их по левому краю экрана, они извлекаются из потока документов, поэтому я не могу обернуть их в родительский элемент div.В конце я намереваюсь установить родительский div на ширину 80% с полосой прокрутки, чтобы увидеть остальные маркеры, так что, очевидно, я делаю это неправильно.Однако я не могу найти какие-либо закодированные фрагменты чего-то похожего на то, что я пытаюсь достичь.
Итак, вот актуальный вопрос:
Какого рода отображение / позиция / плаваниеCSS я должен использовать, чтобы сделать это вместо position: absolute
и float: left
?Если мне нужно, чтобы JS сделал это, то как мне это сделать?
Спасибо за любую помощь, которую вы можете принести мне, будь то код или просто толчок в правильном направлении!
Вот мой (соответствующий) код:
index.html
<html>
<body>
<div id="timeline">
<div id="labels"></div>
<div id="markers"></div>
</div>
</body>
</html>
script.js:
// hardcoded for debugging purposes
// See section below about the API for info about how I get this data
var markers = [
{label: "Start", pos: "20.00000000000000"},
{label: "First", pos: "50.00000000000000"},
{label: "Second", pos: "200.00000000000000"},
{label: "Last", pos: "576.845412000000000"}
];
function draw_markers(marker_list) {
var label_html = "";
var marker_html = "";
$.each(marker_list, function(index, obj) {
var label = obj.label;
var offset = parseFloat(obj.pos) * 7; // obj.pos is mesured in bars, not px
label_html = label_html +
"<span class='label' style='margin-left:"+offset+"px'>" +
label + "</span>";
marker_html = marker_html +
"<span class='marker' style='margin-left:"+offset+"px'>|</span>";
});
document.getElementById("labels").innerHTML = label_html;
document.getElementById("markers").innerHTML = marker_html;
}
draw_markers(markers);
style.css:
html, body {
background: #eeeeee;
}
#timeline {
height: 4em;
width: 100%;
background-color: #9E9E9E;
}
#labels {
border-bottom: 1px solid black;
height: 50%;
width: 100%;
}
#markers {
height: 50%;
width: 100%;
}
.label {
position: absolute;
float: left;
}
.marker {
position: absolute;
float: left;
}
Мы получили множество функций, которые регулярно опрашивают сервер и анализируют (открытый текст) ответы.Типичный ответ выглядит примерно так:
MARKERLIST_BEGINMARKER_LIST
MARKER \t label \t ID \t position
...
MARKER_LIST_END
TRANSPORT \t playstate \t position_seconds \t isRepeatOn \t position_string \t position_string_beats
...
Используя JS, я разбиваю каждую строку и использую оператор switch, чтобы выяснить, что делать с каждой строкой.Затем я создаю глобальный массив, содержащий все маркеры в проекте, с необходимой мне информацией.