Выделять текст БЕЗ удерживания ЛКМ.
Текст:
Это нереально осуществить? Задача: Выделение текста двумя кликами (I - текстовый курсор): 1й делаем здесь: Это неIреально осуществить? 2й делаем здесь: Это нереальноI осуществить? Будет выделено: реально Другими словами, не нужно будет удерживать левую кнопку мыши, чтобы выделять текст. Установил начальную метку выделения, конечную и готово. Особенно будет удобно, если текста много. Смотрел про Range, Selection (JavaScript) и нихрена (извиняюсь) не понял, как решить казалось бы простую задачу! Может быть можно как-то программно удерживать левую кнопку мыши, типа mousepressed. Может ли JavaScript получить состояние кнопки мыши, а потом поддерживать его, мол 0 - кнопка не нажата, а 1 - нажата? Помогите, пожалуйста, товарищи! |
Teamur, а такое выделение на каждый второй клик раздражать не будет?
|
Нет )
Насколько я понял так называемая граничная точка выделения (boundary point) появляется лишь когда пользователь зажимает и отводит курсор. (https://learn.javascript.ru/range-textrange-selection) Длительное удерживание кнопки мыши нажатой напрягает мышцы, особенно если нужно выделить большой фрагмент текста. А тут 2 спокойных щелчка в начале и конце фрагмента и он выделен. Данная фишка, так сказать, будет реализовываться в блоке в режиме contenteditable. Пользователь устанавливает текстовый курсор и как только он это сделает, скрипт должен включить выделение как если бы пользователь стал удерживать лкм. |
Teamur,
если не заморачиватся -- выделение текста только слева на право и без ie8 <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <p id="content">Это <b>нереально</b> осуществить?</p> <script> var s = [], d = document.getElementById("content"), el; function setSelect() { var a = window.getSelection(), c = a.anchorOffset; if (s.length) { var b = document.createRange(); b.setStart(el, s.shift()); b.setEnd(a.anchorNode, c); a.removeAllRanges(); a.addRange(b) } else {s.push(c); el = a.anchorNode} }; d.onclick = setSelect </script> </body> </html> |
Отлично, но выделение какое-то не отзывчивое, как-то через раз.
А можно ли сделать так, чтобы скрипт сам "зажал" лкм как только курсор будет установлен? Спасибо. Типа Mousedown fixed - двигаем курсор, а за ним всё выделяется - второй клик и готово ) Конечно, я понимаю на словах все просто, но в реальности ( |
Teamur,
Цитата:
Цитата:
и весь этот скрипт заменяет клавиша Shift -- вам трудно второй клик сделать с нажатым шифтом? |
О точно, можно ведь имитировать нажатие шифта. )
Желание реализовать эту функцию в итоге привело к тому, что я зарегистрировался на этом сайте, так как запутался в десятках вкладок и потерялся в море информации, так и не нашел ничего подобного. |
Цитата:
Цитата:
|
Значит Javascript не такой могущественный как я считал ранее. Всего то нужно 2 клика. Может так: клик в блоке - выделяет всё, что в нем находится, но в стилях мы специально скроем фон выделения (100% прозрачность). Далее 2 кликами мы просто будем обрубать то, что находится снаружи.
|
Честно говоря, я без понятия как решить задачу. Я бы сразу добавил скрипт в избранное! ))
Двое из ларца: "И так сойдет! )))" Не хотелось бы, чтобы это сообщение было последним в теме! |
Teamur,
добавил костыль для выделения справа на лево , но возможно есть более нормальный метод <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <p id="content">Это <b>нереально</b> осуществить?</p> <script> var s = [], d = document.getElementById("content"), el; function setSelect() { var a = window.getSelection(), c = a.anchorOffset; if (s.length) { var b = document.createRange(); var pos = s.shift(); b.setStart(el, pos); b.setEnd(a.anchorNode, c); if (!b.toString()) { b.setStart(a.anchorNode, c); b.setEnd(el, pos); } a.removeAllRanges(); a.addRange(b) } else {s.push(c); el = a.anchorNode} }; d.onclick = setSelect </script> </body> </html> |
Огромное спасибо! Подскажите пожалуйста куда копать дальше, чтобы усовершенствовать его? Может кто-то предложит другие варианты?
|
Цитата:
var e = $.Event("keydown", { keyCode: 16}); $("body").trigger(e); А так не прокатит? |
Sigizmund2012,
попробуйте сделать рабочий макет ... я плохо обьясняю, но вызов обработки события и само событие, разные фрукты. |
Sigizmund2012,
копать надо сюда http://habrahabr.ru/post/114244/ |
Было бы просто супер, если бы после первого клика (установки курсора), выделение было бы видно (шло за курсором, как при обычном выделении), а то непонятно началось оно или нет! Спасибо.
|
Рони, спасибо! Желаю вам творческих успехов и отличного настроения, спасибо! Тема закрыта.
|
Часовой пояс GMT +3, время: 16:02. |