Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.11.2018, 06:41
Аспирант
Отправить личное сообщение для desperate_one Посмотреть профиль Найти все сообщения от desperate_one
 
Регистрация: 21.04.2017
Сообщений: 43

Изменение стиля строчки таблицы, которая будет по центру вертикали
Итак, всем привет! Есть таблица:
<table style="height:300px; overflow-y:auto;">
 <tr>
  <td>#1</td>
  <td>name1</td>
  <td>desc1</td>
  <td>price1</td>
 </tr>
 <tr>
  <td>#2</td>
  <td>name2</td>
  <td>desc2</td>
  <td>price2</td>
 </tr>
 <tr>
  <td>#3</td>
  <td>name3</td>
  <td>desc3</td>
  <td>price3</td>
 </tr>
 <tr>
  <td>#4</td>
  <td>name4</td>
  <td>desc4</td>
  <td>price4</td>
 </tr>
 <tr>
  <td>#5</td>
  <td>name5</td>
  <td>desc5</td>
  <td>price5</td>
 </tr>
</table>

И по ней у меня стоит задачка, нужно чтобы при прокрутке таблицы вверх/вниз строчка, которая вертикально окажется по центру меняла свой стиль: высота, шрифт и прочее. Важно как-то реализовать, чтобы самый верхний и самый нижний строки прокручивались до этого центра. Спасибо заранее!


Последний раз редактировалось desperate_one, 28.11.2018 в 06:59.
Ответить с цитированием
  #2 (permalink)  
Старый 28.11.2018, 08:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

desperate_one,
Ответить с цитированием
  #3 (permalink)  
Старый 28.11.2018, 08:33
Аспирант
Отправить личное сообщение для desperate_one Посмотреть профиль Найти все сообщения от desperate_one
 
Регистрация: 21.04.2017
Сообщений: 43

ну я вроде максимально коротко и ясно изложил задачу
Ответить с цитированием
  #4 (permalink)  
Старый 28.11.2018, 09:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от desperate_one
ну я вроде максимально коротко и ясно изложил задачу
подожду решения, тогда узнаю, что было в задаче.
Ответить с цитированием
  #5 (permalink)  
Старый 28.11.2018, 10:13
Аспирант
Отправить личное сообщение для desperate_one Посмотреть профиль Найти все сообщения от desperate_one
 
Регистрация: 21.04.2017
Сообщений: 43

Попробую другими словами:
Таблица:
<table style="height:300px; overflow-y:auto;">
 <tr>
  <td>#1</td>
  <td>name1</td>
  <td>desc1</td>
  <td>price1</td>
 </tr>
 <tr>
  <td>#2</td>
  <td>name2</td>
  <td>desc2</td>
  <td>price2</td>
 </tr>
 <tr>
  <td>#3</td>
  <td>name3</td>
  <td>desc3</td>
  <td>price3</td>
 </tr>
 <tr>
  <td>#4</td>
  <td>name4</td>
  <td>desc4</td>
  <td>price4</td>
 </tr>
 <tr>
  <td>#5</td>
  <td>name5</td>
  <td>desc5</td>
  <td>price5</td>
 </tr>
</table>

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

Последний раз редактировалось desperate_one, 28.11.2018 в 10:18.
Ответить с цитированием
  #6 (permalink)  
Старый 28.11.2018, 11:01
Аспирант
Отправить личное сообщение для desperate_one Посмотреть профиль Найти все сообщения от desperate_one
 
Регистрация: 21.04.2017
Сообщений: 43

В Этом уроке есть схожее решение как показано в их Демке. Но фокусируемый элемент сдвигается вверх или вниз в зависимости от скролла, к тому же он работает только при наведении мыши, можно ли это подправить под скролл и сделать так, чтоб фокусируемый элемент всегда был по центру, а список смещался вверх/вниз?
Ответить с цитированием
  #7 (permalink)  
Старый 28.11.2018, 13:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

desperate_one,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .slider{
   height: 150px;
   border: 1px solid #0000FF;
   overflow-y: scroll;
    width: 340px;
  }
  .slider table{
      margin:  50px 0;
  }
  .slider table tr td{
     transition: 1s;

  }
  .big td{
       transform: scaleY(3);
  }

  </style>


</head>

<body>
<div class="slider">
 <table style="height:300px; overflow-y:auto;">
 <tr>
  <td>#1</td>
  <td>name1</td>
  <td>desc1</td>
  <td>price1</td>
 </tr>
 <tr>
  <td>#2</td>
  <td>name2</td>
  <td>desc2</td>
  <td>price2</td>
 </tr>
 <tr>
  <td>#3</td>
  <td>name3</td>
  <td>desc3</td>
  <td>price3</td>
 </tr>
 <tr>
  <td>#4</td>
  <td>name4</td>
  <td>desc4</td>
  <td>price4</td>
 </tr>
 <tr>
  <td>#5</td>
  <td>name5</td>
  <td>desc5</td>
  <td>price5</td>
 </tr>
</table>
</div>
<script>

    var element = document.querySelector('.slider');
    var tr = element.querySelectorAll('tr');
    var index = 0;
    tr[index].classList.add("big");
    element.onscroll = function() {
      var maxScoll = 1 + element.scrollHeight - element.clientHeight;
      var scroll = element.scrollTop;
      tr[index].classList.remove("big")
      index = tr.length * (scroll/maxScoll)|0;
      tr[index].classList.add("big")
    }
  </script>
</body>
</html>
Ответить с цитированием
  #8 (permalink)  
Старый 28.11.2018, 14:03
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

по хорошему бы еще wheel перехватить, сделать построчным.
Ответить с цитированием
  #9 (permalink)  
Старый 28.11.2018, 14:33
Аспирант
Отправить личное сообщение для desperate_one Посмотреть профиль Найти все сообщения от desperate_one
 
Регистрация: 21.04.2017
Сообщений: 43

Сообщение от рони Посмотреть сообщение
desperate_one,
Сообщение от рони Посмотреть сообщение
desperate_one,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .slider{
   height: 150px;
   border: 1px solid #0000FF;
   overflow-y: scroll;
    width: 340px;
  }
  .slider table{
      margin:  50px 0;
  }
  .slider table tr td{
     transition: 1s;

  }
  .big td{
       transform: scaleY(3);
  }

  </style>


</head>

<body>
<div class="slider">
 <table style="height:300px; overflow-y:auto;">
 <tr>
  <td>#1</td>
  <td>name1</td>
  <td>desc1</td>
  <td>price1</td>
 </tr>
 <tr>
  <td>#2</td>
  <td>name2</td>
  <td>desc2</td>
  <td>price2</td>
 </tr>
 <tr>
  <td>#3</td>
  <td>name3</td>
  <td>desc3</td>
  <td>price3</td>
 </tr>
 <tr>
  <td>#4</td>
  <td>name4</td>
  <td>desc4</td>
  <td>price4</td>
 </tr>
 <tr>
  <td>#5</td>
  <td>name5</td>
  <td>desc5</td>
  <td>price5</td>
 </tr>
</table>
</div>
<script>

    var element = document.querySelector('.slider');
    var tr = element.querySelectorAll('tr');
    var index = 0;
    tr[index].classList.add("big");
    element.onscroll = function() {
      var maxScoll = 1 + element.scrollHeight - element.clientHeight;
      var scroll = element.scrollTop;
      tr[index].classList.remove("big")
      index = tr.length * (scroll/maxScoll)|0;
      tr[index].classList.add("big")
    }
  </script>
</body>
</html>
Супер! То что надо!
Ответить с цитированием
  #10 (permalink)  
Старый 29.11.2018, 10:14
Аспирант
Отправить личное сообщение для desperate_one Посмотреть профиль Найти все сообщения от desperate_one
 
Регистрация: 21.04.2017
Сообщений: 43

А как сделать, чтобы при прокрутке до конца(если до низу, показывалось начало списка, и если до верху, то показывался конец списка) ? То есть чтоб был бесконечный список?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу функцию для canvas, которая будет перемещать мой объект на позицию х,у eko24 Events/DOM/Window 0 12.10.2013 00:33
Динамическое создание iframe в Firefox mrbean11 Firefox/Mozilla 8 02.11.2012 21:23