Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   как получить первую видимую строку в переменную ? (https://javascript.ru/forum/misc/29441-kak-poluchit-pervuyu-vidimuyu-stroku-v-peremennuyu.html)

mitiya 28.06.2012 02:14

как получить первую видимую строку в переменную ?
 
есть текст на несколько экранов, нужно сделать что-то типа закладок.
хочу как-то сделать так что бы первые 2-3 слова из самой верхней видимой в данный момент строки попадали в переменную, а потом чтобы можно было запустить поиск по тексту и прокрутить до этого места.
Запоминать вместо текста положение вертикального ползунка не вариант ибо, при изменении размера окна это не сработает.
но как найти именно первую видимую строку я ума не приложу (

Aetae 28.06.2012 07:51

По словам - не вариант, они могут повторятся.
Если текст статичен(не дописывается и не правится), то это можно сделать запомнив самую верхнюю видимую ноду и в ней текстовую позицию начала видимой строки.

Gvozd 28.06.2012 10:22

вы что HTML не учите?!
<a name="ancor1">тут</a>

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

<a name="ancor2">там</a>

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

<a href="#ancor1" >туда</a>
<a href="#ancor2" >в тама</a>

mitiya 28.06.2012 11:16

Aetae,
можно по подробней? я в общем-то не еще только разбираюсь в js.

Gvozd,
я знаю про якоря, но. дело в том что я хочу что бы эти закладки сохранялись на сайте, и открыв на другом компе они тоже были.
По сути это даже не закладка, а просто сохранение прогресса чтения.
Так-то его конечно можно все время тянуть как бы за собой, но все равно нужно во первых как-то понять где эта первая видимая строка чтоб его туда впихнуть.И как то на сервер отправить данные о ее местоположении, мне кажется что каждый раз придется весь текст отправлять целиком(

Deff 28.06.2012 11:23

mitiya,
Цитата:

Сообщение от mitiya
есть текст на несколько экранов, нужно сделать что-то типа закладок.
хочу как-то сделать так что бы первые 2-3 слова из самой верхней видимой в данный момент строки попадали в переменную, а потом чтобы можно было запустить поиск по тексту и прокрутить до этого места.
Запоминать вместо текста положение вертикального ползунка не вариант ибо, при изменении размера окна это не сработает.
но как найти именно первую видимую строку я ума не приложу (

Ну идея такая при открытии страницы - смотрим скролл Top и и и пересчитываем его в скролл Тор от ближайшего вышележашего якоря от данной строки -якорь и скролл Тор от него запоминаем в переменную
По событию скролл - опять смотрим и пересчитываем, в процессе возможны и смены якорей и отступов, посколь заголовки типично прописываются через ID

Deff 28.06.2012 12:04

Есть более продвинутая метода вертикальная таблица во фрейме на 10 экранов и узенькая по ширине, при очередном скролле кликаем по табле на уровне Верхней границы экрана, номер строки запоминам, фрейм position:absolute;z-index:-1000;height:100%;

Aetae 28.06.2012 12:44

>вертикальная таблица во фрейме на 10 экранов и узенькая по ширине
Ты съел мой мозг.

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

Раз такое дело, то мои бредни имеют больше шансов на жизнь:
Видимый элемент на вскидку можно получить с помощью elementFromPoint, затем сделать с него range, и получить позицию первого видимого символа в этом элементе(как - пока не ясно, но по идее можно). Запоминать соответственно абсолютный номер ноды и позицию в тексте.
При последующей загрузке находить ноду, делать range, вставлять в позицию невидимый якорь и скролить к нему.

Как-то так.)

Deff 28.06.2012 12:54

Aetae,

:) Для текущего Аккаунта - достаточно удобная вещь - посколь во фрейме тут жа можно отправить форму с данными скролла для этого юзера - как то делал для просмотра архивов чата Администратором
Архивы бывают на 10-30 листов
Для многопользовательского сайта мон организовать записью в кук текущего юзера двумерным массивом
где первый индекс - ссылка на таблицу с адресами страниц, второй - номер строки фреймо таблицы, ксать тады её стоит ставить не фреймом, а div overflow-y:hidden, посколь на фрейме с куками проблемы

Deff 28.06.2012 13:17

Цитата:

Сообщение от Aetae
они зависимы от разрешения экрана, оп сказал что ему нужен независимый вариант.

Ерунда - высота ячейки заранее определена! к примеру 20px

А метод с запоминанием скролла от ближайщего якоря - реализован здесь - кликните дважды на произвольное место в топике => http://forumd.ru/viewtopic.php?id=1225
И перезагрузите страницу

Aetae 28.06.2012 13:21

Цитата:

Сообщение от Deff (Сообщение 184796)
Aetae,
Для многопользовательского сайта мон организовать записью в кук текущего юзера двумерным массивом
где первый индекс - ссылка на таблицу с адресами страниц, второй - номер строки фреймо таблицы, ксать тады её стоит ставить не фреймом, а div overflow-y:hidden, посколь на фрейме с куками проблемы

Ещё раз говорю - опу нужно независимое от разрешение решение.
Ваш метод и так то весьма приблизителен, а в случае если такая ссылка будет сохранена при разрешении 1024х764, а открыта например при 1280х800 - попадание будет даже не близко. Такое решение будет работать только если весь тест состоит из абзацев по одной коротенькой строкеэ(и то не факт) либо если ширина строго фиксирована.

upd
Цитата:

Сообщение от Deff (Сообщение 184810)
А метод с запоминанием скролла от ближайщего якоря - реализован здесь - кликните дважды на произвольное место в топике => http://forumd.ru/viewtopic.php?id=1225
И перезагрузите страницу

Убогая мелкая фиксированная ширина, о чём я и говорю.

Попробуйте двойной клик, затем Ctrl+++ чтоб появились переносы строки, а затем обновить. Прам пам пам.


Часовой пояс GMT +3, время: 00:25.