Intereting Posts
Как я могу открыть изображения в ящике Google Colaboratory из загруженных файлов PNG? Большая текстовая обработка делает сообщение об ошибке http Сокращение HTML-файлов Как получить значение textbox в файле node.js? Как я могу отобразить gif загрузки до тех пор, пока не будет загружена вся страница html Статистика сервера ASP для html-страниц Как правильно использовать FastClick с jQuery Mobile? Как я могу просмотреть арабские / персидские числа на странице HTML со строгим doctype? Как показать страницу только после выполнения Java-кодов в JSP Как я могу предотвратить обтекание флотированных элементов div при изменении размера браузера? Получение пустого значения с помощью val () Динамическая прокрутка фона Как отобразить страницу с отсортированным выпадающим списком? Как я могу центрировать и лево выравнивать изображения? Разрешать только столичные и маленькие буквы

Обнаружение наведения на выбранный текст

Я создаю WYSIWYG богатый текстовый редактор.

Когда пользователь выбирает часть своего текста, я хотел бы представить меню в подсказке. Представление меню отлично работает, но я хотел бы только показать его, если пользователь наводится на выделенный текст.

Как показано:

введите описание изображения здесь

Я также не определился с позиционированием (мне нравится, как это проиллюстрировано), но для уточнения, это не вопрос.

Возникает вопрос: как фильтровать событие зависания, которое происходит по выбранному тексту?

Проблемы:

  1. Я не могу просто слушать событие выбора текста или события наведения, чтобы увидеть, находятся ли они над элементами, которые выбрали текст внутри них. Левое изображение создало бы ложный результат.

  2. Я знаю, как получить выделенный текст, но я не знаю, как получить выбранный регион .

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

В режиме mouseup используйте Range.getClientRects, чтобы захватить ограничивающие прямоугольники каждой строки выделения.

Затем вы можете проверить, находится ли мышь над выбором следующим образом:

 var cr= []; $(document).on({ 'mouseup': function() { cr= window.getSelection().getRangeAt(0).getClientRects(); }, 'mousemove': function(ev) { //hide the pop up for(var i = 0 ; i < cr.length ; i++) { if(ev.pageX >= cr[i].left && ev.pageX < = cr[i].right && ev.pageY >= cr[i].top && ev.pageY < = cr[i].bottom ) { //show the pop up break; } } } }); 

скрипка

Попробуйте так:

JS

 $(document).ready(function () { $(document).on("mouseup", ".conttext", function () { var highlight = window.getSelection(); console.log(highlight); var spn = '' + highlight + ''; var text = $('.conttext').text(); $('.conttext').html(text.replace(highlight, spn)); }); $(document).on("mouseover", ".highlight", function () { alert("You hovered on selected tex"); // Your tooltip code goes here }) }); 

CSS:

 .highlight { color:#888; position:relative;/*This will not matter if you inject tooltip using JS*/ display:inline-block;/*This will not matter if you inject tooltip using JS*/ } 

HTML:

 
Sample text

Демо: http://jsfiddle.net/lotusgodkk/BGKSN/202/