Выделять текст БЕЗ удерживания ЛКМ.
Текст:
Это нереально осуществить? Задача: Выделение текста двумя кликами (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, время: 00:22. |