28.06.2012, 02:14
|
Кандидат Javascript-наук
|
|
Регистрация: 13.01.2011
Сообщений: 114
|
|
как получить первую видимую строку в переменную ?
есть текст на несколько экранов, нужно сделать что-то типа закладок.
хочу как-то сделать так что бы первые 2-3 слова из самой верхней видимой в данный момент строки попадали в переменную, а потом чтобы можно было запустить поиск по тексту и прокрутить до этого места.
Запоминать вместо текста положение вертикального ползунка не вариант ибо, при изменении размера окна это не сработает.
но как найти именно первую видимую строку я ума не приложу (
|
|
28.06.2012, 07:51
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,587
|
|
По словам - не вариант, они могут повторятся.
Если текст статичен(не дописывается и не правится), то это можно сделать запомнив самую верхнюю видимую ноду и в ней текстовую позицию начала видимой строки.
__________________
29375, 35
Последний раз редактировалось Aetae, 28.06.2012 в 07:54.
|
|
28.06.2012, 10:22
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
вы что 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>
|
|
28.06.2012, 11:16
|
Кандидат Javascript-наук
|
|
Регистрация: 13.01.2011
Сообщений: 114
|
|
Aetae,
можно по подробней? я в общем-то не еще только разбираюсь в js.
Gvozd,
я знаю про якоря, но. дело в том что я хочу что бы эти закладки сохранялись на сайте, и открыв на другом компе они тоже были.
По сути это даже не закладка, а просто сохранение прогресса чтения.
Так-то его конечно можно все время тянуть как бы за собой, но все равно нужно во первых как-то понять где эта первая видимая строка чтоб его туда впихнуть.И как то на сервер отправить данные о ее местоположении, мне кажется что каждый раз придется весь текст отправлять целиком(
|
|
28.06.2012, 11:23
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
mitiya,
Сообщение от mitiya
|
есть текст на несколько экранов, нужно сделать что-то типа закладок.
хочу как-то сделать так что бы первые 2-3 слова из самой верхней видимой в данный момент строки попадали в переменную, а потом чтобы можно было запустить поиск по тексту и прокрутить до этого места.
Запоминать вместо текста положение вертикального ползунка не вариант ибо, при изменении размера окна это не сработает.
но как найти именно первую видимую строку я ума не приложу (
|
Ну идея такая при открытии страницы - смотрим скролл Top и и и пересчитываем его в скролл Тор от ближайшего вышележашего якоря от данной строки -якорь и скролл Тор от него запоминаем в переменную
По событию скролл - опять смотрим и пересчитываем, в процессе возможны и смены якорей и отступов, посколь заголовки типично прописываются через ID
|
|
28.06.2012, 12:04
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Есть более продвинутая метода вертикальная таблица во фрейме на 10 экранов и узенькая по ширине, при очередном скролле кликаем по табле на уровне Верхней границы экрана, номер строки запоминам, фрейм position:absolute;z-index:-1000;height:100%;
|
|
28.06.2012, 12:44
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,587
|
|
>вертикальная таблица во фрейме на 10 экранов и узенькая по ширине
Ты съел мой мозг.
Вообще какие-то адские бредни ты предлпогаешь, имхо.) И даже если их применить - они зависимы от разрешения экрана, оп сказал что ему нужен независимый вариант.
Раз такое дело, то мои бредни имеют больше шансов на жизнь:
Видимый элемент на вскидку можно получить с помощью elementFromPoint, затем сделать с него range, и получить позицию первого видимого символа в этом элементе(как - пока не ясно, но по идее можно). Запоминать соответственно абсолютный номер ноды и позицию в тексте.
При последующей загрузке находить ноду, делать range, вставлять в позицию невидимый якорь и скролить к нему.
Как-то так.)
__________________
29375, 35
Последний раз редактировалось Aetae, 28.06.2012 в 12:53.
|
|
28.06.2012, 12:54
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Aetae,
Для текущего Аккаунта - достаточно удобная вещь - посколь во фрейме тут жа можно отправить форму с данными скролла для этого юзера - как то делал для просмотра архивов чата Администратором
Архивы бывают на 10-30 листов
Для многопользовательского сайта мон организовать записью в кук текущего юзера двумерным массивом
где первый индекс - ссылка на таблицу с адресами страниц, второй - номер строки фреймо таблицы, ксать тады её стоит ставить не фреймом, а div overflow-y:hidden, посколь на фрейме с куками проблемы
Последний раз редактировалось Deff, 28.06.2012 в 13:07.
|
|
28.06.2012, 13:17
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от Aetae
|
они зависимы от разрешения экрана, оп сказал что ему нужен независимый вариант.
|
Ерунда - высота ячейки заранее определена! к примеру 20px
А метод с запоминанием скролла от ближайщего якоря - реализован здесь - кликните дважды на произвольное место в топике => http://forumd.ru/viewtopic.php?id=1225
И перезагрузите страницу
Последний раз редактировалось Deff, 28.06.2012 в 13:21.
|
|
28.06.2012, 13:21
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,587
|
|
Сообщение от Deff
|
Aetae,
Для многопользовательского сайта мон организовать записью в кук текущего юзера двумерным массивом
где первый индекс - ссылка на таблицу с адресами страниц, второй - номер строки фреймо таблицы, ксать тады её стоит ставить не фреймом, а div overflow-y:hidden, посколь на фрейме с куками проблемы
|
Ещё раз говорю - опу нужно независимое от разрешение решение.
Ваш метод и так то весьма приблизителен, а в случае если такая ссылка будет сохранена при разрешении 1024х764, а открыта например при 1280х800 - попадание будет даже не близко. Такое решение будет работать только если весь тест состоит из абзацев по одной коротенькой строкеэ(и то не факт) либо если ширина строго фиксирована.
upd
Сообщение от Deff
|
А метод с запоминанием скролла от ближайщего якоря - реализован здесь - кликните дважды на произвольное место в топике => http://forumd.ru/viewtopic.php?id=1225
И перезагрузите страницу
|
Убогая мелкая фиксированная ширина, о чём я и говорю.
Попробуйте двойной клик, затем Ctrl+++ чтоб появились переносы строки, а затем обновить. Прам пам пам.
__________________
29375, 35
Последний раз редактировалось Aetae, 28.06.2012 в 13:28.
|
|
|
|