Поиск и отображение потомка в блоке с прокруткой
Здравствуйте!
Вопрос к знатокам: <div id = 'one'> <div id = 'two'> <> ... список ... </> </div> </div> Блок первый ограничен в размерах. Блок второй носит свойство overflow:auto; т.е. с прокруткой. Вопрос: как отобразить мне необходимую строку списка (ну если она в середине или конце) при заходе на страницу. |
https://developer.mozilla.org/en-US/...ment/scrollTop
https://developer.mozilla.org/en-US/...dingClientRect <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> #two { width: 100%; height: 150px; overflow: auto; } li { display: block; height: 150px; color: #fff; text-align: center; } </style> </head> <body> <div id="two"> <ul> <li style="background-color: tomato">1</li> <li style="background-color: purple; height: 500px;">2</li> <li style="background-color: blue">3</li> </ul> </div> <script> function showItem(x) { var two = document.getElementById('two'), item = document.querySelectorAll('#two ul li')[x-1]; if (!item) { return false; } var y = item.getBoundingClientRect().y - two.getBoundingClientRect().y; two.scrollTop = y; } showItem(2); </script> </body> </html> |
Lemme,
:blink: |
рони, ?:D
изменил слегка ;) |
Lemme,
интересно что делает ваш код? |
рони, перематывает на необходимый li элемент. А что должно быть?
|
Цитата:
|
рони, эм, почему вряд ли то?=)
|
Lemme,
вы хотите сказать что код рабочий а не бред? |
рони, код рабочий, но на счет бреда - не уверен, ибо я все таки новичок =)
Был бы рад, если бы вы объяснили - почему бред. |
Цитата:
наверно надо сначала показать блок two потом этот блок проскролить к нужному li |
Цитата:
p.s Из за этого Вы посчитали код бредом? :blink: |
Lemme,
я непонимаю как вы его скролите и что такое getBoundingClientRect().y |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> body{ height: 1500px; } #two { margin-top: 445px; width: 100%; height: 150px; overflow: auto; } li { display: block; height: 150px; color: #fff; text-align: center; } </style> </head> <body> <div id="two"> <ul> <li style="background-color: tomato">1</li> <li style="background-color: purple">2</li> <li style="background-color: blue">3</li> </ul> </div> <script> function showItem(x) { var two = document.getElementById('two'), item = two.querySelectorAll('li')[x-1]; item && item.scrollIntoView() } showItem(3); </script> </body> </html> |
рони, позиция элемента - аля offsetTop
Цитата:
|
или так
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> body{ height: 1500px; } #two { margin-top: 445px; width: 100%; height: 150px; overflow: auto; } li { display: block; height: 150px; color: #fff; text-align: center; } </style> </head> <body> <div id="two"> <ul> <li style="background-color: tomato">1</li> <li style="background-color: purple">2</li> <li style="background-color: blue">3</li> </ul> </div> <script> function showItem(x) { var two = document.getElementById('two'), item = two.querySelectorAll('li')[x-1]; window.scrollTo(0,two.getBoundingClientRect().top) two.scrollTop = item.getBoundingClientRect().top } window.onload = function() { showItem(3); } </script> </body> </html> |
рони, ну, ТС не уточнил, на счет видимости блока two, поэтому я не скроллил window.
|
Lemme,
вы так и не ответили что такое что такое getBoundingClientRect().y , на всякий случай: оба ваших варианта у меня не работают. |
Цитата:
Цитата:
Цитата:
DOMRect { x: 48, y: 174, width: 608, height: 500, top: 174, right: 656, bottom: 674, left: 48 } |
Lemme,
:) ок |
Ребята спасибо! Можно было просто назвать метод:scrollIntoView().
Всем по плюсику )))! |
Часовой пояс GMT +3, время: 22:37. |