Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.11.2014, 17:30
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

shim для caretPositionFromPoint (нужна новая мысль)
Привет All!

Сижу вот уже целый день, пытаюсь решить одну проблему. Нужен нормальный/корректно рабочий метод document.caretPositionFromPoint(), его ни один браузер не поддерживает (за исключением Firefox, в котором работает он кривее кривизны, поэтому будем считать что там его тоже нет).

А проблема возникла в том, что нужно определять предположительную позицию каретки над курсором (над нужными координатами) в текстовых полях, TEXTAREA/INPUT. Я начал писать некий шим для этого метода. По началу вроде все пошло норм. Писал соответственно под браузером Хром. Одним словом под webkit написать корректный метод вроде удалось.

Но вот ИЕ всех версий и ФФ, что-то мне совсем не побороть... Хоть ФФ и имеет нативную поддержку, но показывает не верные координаты каретки, если мы определяем в пределах текстового поля но не на тексте, или например если точка находиться над бордюром элемента.

Я подготовил тестовый пример, вы можете сравнить как он работает в Хроме, и как работает в ФФ... Для ИЕ там вообще нет реализации, но тоже надо будет как то его победить.

Вот пример: https://devote.github.io/tests/caret/index.html
Вот исходники: https://github.com/devote/devote.git...er/tests/caret

Если у кого есть идеи по вопросу как побороть ФФ а в идеале и ИЕ, буду очень признателен... Мои все попытки приводят к неудаче, при разных условиях использования. Работать должно так, как сейчас работает в Хроме или Сафари.

Заранее все спасибо!
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #2 (permalink)  
Старый 30.11.2014, 18:02
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

devote, может использовать contenteditable + отслеживание курсора?
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #3 (permalink)  
Старый 30.11.2014, 18:21
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от cyber
может использовать contenteditable + отслеживание курсора?
думал я об этом, но с contenteditable в Firefox так же проблема что и в полях textarea/input... он почему то считает что ткнув по позиции 1 или 2 см. картинку, что это не элемент


Например в реальности если в textarea ткнуть по точке 1 (см. картинку выше), каретка встанет между словом "her" и "feet". А если кликнуть по точке 2, каретка встанет между "either a" и "waistcoat-pocket". Но в Firefox он возвращает либо полную длину содержимого (то есть позицию конца всего содержимого), либо вообще нулевую позицию. На бордюре всегда возвращает позицию 2.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #4 (permalink)  
Старый 30.11.2014, 19:04
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

можно попробовать поместить позади основного input/textarea вспомогательный, который шире основного на величину границы, основная работа - на основном, работа на границе (где не работает) - во вспомогательном
Ответить с цитированием
  #5 (permalink)  
Старый 30.11.2014, 19:38
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Это смотрел?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #6 (permalink)  
Старый 30.11.2014, 19:59
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

bes,
не совсем понял твоей идеи.. как может помочь элемент позади, ведь у ФФ что в TEXTAREA что в обычных элементах один и тот же баг.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #7 (permalink)  
Старый 30.11.2014, 20:01
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от nerv_ Посмотреть сообщение
Это смотрел?
сейчас посмотрю) Спасибо!
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #8 (permalink)  
Старый 30.11.2014, 22:10
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от devote
bes,
не совсем понял твоей идеи.. как может помочь элемент позади, ведь у ФФ что в TEXTAREA что в обычных элементах один и тот же баг.
это скорее попытка избавиться от позиции 2
с позицией 1 сложнее, могу только предложить двигать вспомогательный input вправо/влево до первого символа, но насколько это всё реализуемо не представляю
Ответить с цитированием
  #9 (permalink)  
Старый 30.11.2014, 22:16
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

другой вариант для позиции 1 - добивать пробелами до границы, ориентируясь на пробелы смещаться по ним до первого символа, с учётом того, что размер в textarea можно менять, задачка ещё та
Ответить с цитированием
  #10 (permalink)  
Старый 30.11.2014, 23:39
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от bes
задачка ещё та
согласен... ФФ я пока отложил в сторону, ковыряю решение для ИЕ. В нем вроде все проще, хоть и коряво определяет. Но в ИЕ есть много разных методов, дающих хоть как то выяснить что к чему... Например в ИЕ можно получить координаты (Rect) для каждой строки. А это уже дает пищу для размышлений. А вот с ФФ пока не знаю что делать. Вариант что дал nerv_, тоже не канает. Там работа с обычными элементами, да и тоже не все так гладко как хотелось бы.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Нужна прграмма для перевода из 8 системы исчесления в 2 систему Kanonirus Элементы интерфейса 6 06.11.2009 03:10
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31
нужна программа для этого. Чем писать? javascript или php? spam-server Серверные языки и технологии 3 27.08.2009 00:52