Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > JavaScript: Общие вопросы > Cтатичный хедер у очень широкой таблицы |
Автор: zevgan 4.9.2009, 04:43 |
Сейчас встал перед на первый взгляд тривиальной задачей - статичный хедер у таблицы по ширине во много раз большей, чем ширина окна. Сложность в том, чтобы горизонтальный скроллбар крутил всю таблицу включая хедер, а вертикальный только строки без хедера и притом, чтобы вертикальный скролл находился всегда в поле зрения. Буду благодарен за любой совет (за сегодня перерыл кучу вариантов). |
Автор: EmilRegis 4.9.2009, 07:20 |
может попробовать хедер сделать дивом с position:fixed, а на body onload повесить функцию,которая доставала бы width таблицы и присваивать этот width хедеру? конечно довольно дурацкое решение))) |
Автор: EmilRegis 4.9.2009, 09:01 |
fixed во всех браузерах кроме IE6 и более ранних версий висит на том месте,которое указано позиционированием независимо от скроллинга...то есть улистаешь страницу вниз,а фикнутый элемент будет всё равно висеть в верхнем углу твоего экрана... подозреваю,что все спамерские баннеры, которые вне зависимости от скроллинга висят в центре экрана имеют позицию fixed |
Автор: brother79 4.9.2009, 09:50 | ||
Ну да, именно так, я так и смотрел как такое сделать по этим банерам. Только ИМХО проблема будет не в вертикальном скролинге, а в горизонтальном, т.к. там как раз не надо, чтобы он висел в одном месте. |
Автор: zevgan 4.9.2009, 15:39 |
fixed в самом деле не скроллится, ещё вчера пробовал. Пробовал и другое - хедер сделать отдельной таблицей и javascript'ом раздать ему ширину ячеек исходя из основной таблицы, затем основную таблицу пихануть в див с overflow:auto - тогда появляются два горизонтальных скроллбара: один крутит хедер, другой таблицу. А вот то, что предложил brother79 сейчас попробую и отпишусь. Кстати, задача упрощается тем, что работать сие чудо должно только в ФФ. Значит можно заюзать -moz-scrollbars-vertical -moz-scrollbars-horizontal Добавлено через 10 минут и 36 секунд Ещё прежде, чем делать задумался. Да, идея хорошая, но таким образом у нас вертикальный скролл таблицы получится в самом дальнем правом конце, т.е. далеко за пределами первого монитора. Есть ещё идеи? Я вот подумал, а можно на жабаскрипте написать свои скроллы, или может где-то есть уже написанные? |
Автор: zevgan 4.9.2009, 16:01 |
И вот ещё. Как обзывается событие, которое вызывается при вертикальной прокрутке. Идея такая: По этому событию каждый раз изменять вертикальную позицию хедера (top). Пока не очень представляю, как это реализовать. Может кто-то бросить пример? |
Автор: Amphiluke 4.9.2009, 17:17 | ||||||
Очевидно, «scroll».
Подозреваю, что движение будет неприятно дерганным.
|
Автор: zevgan 4.9.2009, 21:18 |
Amphiluke, большое спасибо. Сейчас посмотрим, насколько он будет дерганный... |
Автор: zevgan 4.9.2009, 22:27 | ||
Чегой-та тут не так... Видоизменил конструкцию на
Получается, что при скролле позиционируемый див уходит с каждым разом всё ниже и ниже от верхней границы, а при пересечении скроллбаром определённого порога вообще уходит за нижнюю границу экрана. В чем моя ошибка? |
Автор: Amphiluke 4.9.2009, 22:43 | ||
Я не знаю, как вы делаете, но у меня такой вариант проходит. Ничего не улетает за границы экрана...
Зеленый div сверху стоит на месте, независимо от прокрутки. |
Автор: zevgan 4.9.2009, 23:39 |
Да, ваш пример отлично работает. Моя ошибка была в том, что я использовал position:absolute вместо relative. К сожалению, relative срабатывает только в случае фиксирования div'а. Мне же нужно зафиксировать tr. Обернуть tr в div пробовал, не помогло (знаю, что извращение). В случае же применения position:absolute к tr он всё-таки начинает двигаться вместе со скроллом, но как я писал выше, гораздо быстрее скорости с которой прокручиватся таблица и по прошествии какого-то расстояния по вертикали полностью уходит за пределы экрана. ![]() |