powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / [Javascript] Как прижать часть таблицы к верхней границе окна при прокрутке?
3 сообщений из 3, страница 1 из 1
[Javascript] Как прижать часть таблицы к верхней границе окна при прокрутке?
    #39282604
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня и с праздником!

Понадобилось в длинной табличке при прокрутке страницы прижать пару строк к верху окна браузера, чтоб на виду оставались. Закинул их в <thead> таким вот образом:
Код: html
1.
2.
3.
4.
5.
6.
<table id="calendar" cellspacing="0" cellpadding="0">
    <thead id="thead" style="position:relative; top:0;">
        <!-- Строка календаря - числа -->
        <tr>
            <th>Число</th>
... и так далее



Наваял скриптик
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<script>
    // Плавающий при прокрутке страницы thead со строками календаря
    window.onload = initFunc;
    window.onscroll = scrollFunc;
    var thTop; // Координата Y заголовка таблицы на момент загрузки страницы
    function initFunc() {
        thTop = document.getElementById('thead').getBoundingClientRect().top + window.pageYOffset;
        scrollFunc(); // А это если F5нуть при прокрученной странице
    }
    function scrollFunc() {
// alert(thTop +" "+ window.pageYOffset);
        document.getElementById('thead').style.top = ((thTop < window.pageYOffset) ?  window.pageYOffset-thTop : 0)+'px';
    }
</script>



В Файрфоксе оно работает без проблем. А вот дальше не всё так хорошо.

В Опере, можно сказать, почти работает. Если раскомментить строчку с алертом (сделал для контроля координат) - то thead аккуратно встаёт куда надо, только в "Ок" потыкать... Если строчка с алертом закомменчена - проблема с рендерингом возникает. Исчезают строки таблицы кусочками или полностью при прокрутке страницы. Видимо, оно как-то связано со способом рендеринга в Опере.

В Хроме не работает вообще - похоже, <thead> не реагирует на изменение .top при position:relative;.

Есть какой-то более-менее простой способ заставить эту штуку работать?
Заранее благодарю.
...
Рейтинг: 0 / 0
[Javascript] Как прижать часть таблицы к верхней границе окна при прокрутке?
    #39282992
Фотография бухалтер фантоцци
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой вариант устроит?

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  <title>table header</title>
  <style>
  * { margin:0; padding:0; }
  #dmain { position:relative; width:100%; }
  #dhead { position:fixed; top:0; left:0; width:100%; }
  #calendar, #theader { border-spacing:0; width:100%; }
  #theader { background:#eeeeee; }
  #calendar td, #theader td { border:solid 1px #000000; border-collapse:collapse; }
  </style>
  <script>
    document.addEventListener("DOMContentLoaded", initFunc, false);
    function initFunc(e) {
      var i, html = '';
      /* Инициализация тестовой таблицы */
      for (i=0; i<300; i++) { html+='<tr><td>'+i+'</td><td>Текст '+i+'</td></tr>'; }
      getId('dmain').innerHTML = '<table id="calendar"><tbody>'+html+'</tbody></table>';
      /* Корректировка заголовка */
      scrollFunc();
      /* Установка корректировки при прокрутке и изменении размеров окна/блока */
      // document.addEventListener("scroll", scrollFunc, false);
      window.addEventListener("resize", scrollFunc, false);
    }
    function getId(node) { /* Cсылка на объект по его id */
      return typeof node == "object" ? node : document.getElementById(node);
    }
    function scrollFunc(e) {
      var cellsC = getId('calendar').rows[0].cells,
          cellsH = getId('theader').rows[0].cells,
          cnt = cellsC.length,
          i;
      for (i=0; i<cnt; i++) {
        cellsH[i].style.width = document.defaultView.getComputedStyle(cellsC[i], "").getPropertyValue('width');
      }
      // console.log(cellsH[0].style.width + ' '+cellsH[1].style.width);
    }
  </script>
</head>
<body>
  <div id="dmain">
  </div>
  <div id="dhead">
    <table id="theader"><tbody><tr><td>Число</td><td>Текст</td></tr></tbody></table>
  </div>
</body>
</html>
...
Рейтинг: 0 / 0
[Javascript] Как прижать часть таблицы к верхней границе окна при прокрутке?
    #39283021
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бухалтер фантоцци,

Благодарю, идея и смысл понятны. На неделе попытаюсь запилить.
А пока - выходные :-)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / [Javascript] Как прижать часть таблицы к верхней границе окна при прокрутке?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]