touchNote — это плагин на основе jQuery, который позволяет добавлять комментарии и выделять заметки в HTML статьях. Он помогает разработчикам легко реализовать функцию комментирования веб-страниц. Поддерживает выделение текста на веб-страницах, добавление комментариев и другие функции.
Большое спасибо за две статьи, которые предоставили идею:
Вы можете обратиться к демонстрационной странице кода для проверки страницы, просто запустите html.
Ключ | Параметр | Значение |
---|---|---|
root | По умолчанию: document.body | Начальный элемент для вычисления смещения |
username | По умолчанию: 兔先生 | Имя пользователя, обычно динамические данные, полученные из session или cookie |
userimage | По умолчанию: | Изображение профиля пользователя |
parSelectors | По умолчанию: | Селектор родительского узла, только узлы, соответствующие селектору, используются в качестве родительских узлов для расчёта относительного смещения текста. Рекомендуется использовать фиксированные и неизменные селекторы узлов, чтобы уменьшить влияние изменений содержимого на узлы. Например, можно использовать селекторы для разделов или контейнеров содержимого. |
noteContainerSelector | По умолчанию:.notesshow_container_div | Селектор контейнера заметок jQuery |
noteCountSelector | По умолчанию:.notesshow_container_div .notesCount | Селектор количества заметок |
noteItemClsName | По умолчанию: notesdiv | Класс стиля элемента заметки |
noteSelectedClsName | По умолчанию: noteselected | Класс выбранного стиля элемента заметки |
hltagName | По умолчанию: span | Тег, используемый для обертывания выделенного текста |
hltmpClsName | По умолчанию: tmp_touch_notes | Класс стиля, используемый для обозначения выбранной области |
hlClsName | По умолчанию: touch_notes | Класс стиля выделения |
hldatas | По умолчанию:[] | Данные по умолчанию, отображаемые после выделения, формат см. ниже |
highlightNoteAfter | Функция, по умолчанию открывает всплывающее окно и передаёт текущий выбранный диапазон параметров | Метод обработки после выделения элемента, параметры (ele, data, tipsClass, tipsContentClass, options) |
mouseup | Функция(event, root, ele, options) | Метод, вызываемый после выбора элемента с помощью мыши, параметры(event, root, ele, options) |
mouseover | Функция(event, root, ele, options) | |
mouseOverBefore | Функция(event, root, ele, options) | Функция начала обработки события mouseover, возвращает логическое значение, если оно равно false, обработка не продолжается. Параметры (event, root, ele, options). Если переопределить mouseover, эта функция не будет вызвана. |
mouseOverInHigh | Функция(targetEle, event, root, ele, options) | Функция обработки события mouseover в выделенном узле. (targetEle, event, root, ele, options), если переопределить mouseover, то эта функция не будет вызвана. |
mouseOverAfter | Функция(event, root, ele, options) | Функция завершения обработки события mouseover. Параметры(event, root, ele, options), если переопределить mouseover, то эта функция не будет вызвана. |
highlightNoteMouseover | [ ] | Массив событий наведения мыши на выделенный узел, первая функция — событие ввода мыши, вторая функция — событие вывода мыши. Эти функции соответственно добавляют и удаляют класс selected. |
openDialog | Функция, которую необходимо реализовать самостоятельно | Открыть диалоговое окно |
tooltopsHtml | По умолчанию: Определены методы рисования линий, копирования и добавления заметок | HTML всплывающего окна после выбора |
tooltopsClickLine | Функция, по умолчанию: Пустая функция | Метод рисования линии во всплывающем окне после выбора |
tooltopsClickNote | Функция | Метод добавления заметок во всплывающем окне после выбора |
tooltopsClickCopy | Функция, по умолчанию: пустая функция | Метод копирования во всплывающем окне после выбора |
tooltopsClickOthers | Функция, по умолчанию: пустая функция | Методы во всплывающем окне после выбора, которые можно расширить самостоятельно |
addNoteHtml | Функция(data, index, datas, noteContainerEle, root, ele, options) | Добавить содержимое области заметок, при необходимости можно переопределить. Индекс класса — number, имя пользователя класса — username, текст класса — text, примечание класса — remarks, класс времени создания — createtime. Параметры (data, index, noteContainerEle, root, options, datas), data — данные, index — индекс, datas — все данные, noteContainerEle — объект jQuery контейнера, root — корневой элемент, ele — обрабатываемый объект, options — конфигурация |
getAddNoteEle | Функция(data, index, datas, noteContainerEle, root, ele, options) | Добавить содержимое области заметок, при необходимости можно переопределить. Параметры (data, index, noteContainerEle, root, options, datas), data — данные, index — индекс, datas — все данные, noteContainerEle — объект jQuery контейнера, root — корневой элемент, ele — обрабатываемый объект, options — конфигурация |
fixNoteTopFn | Функция(noteContainerEle, root, ele, options) | Способ вычисления верхнего смещения области заметок |
noteOperateHtml | По умолчанию: Изменить
Удалить
|
HTML операций области заметок справа, обязательно наличие touch-note-popmenus, элементы внутри должны иметь класс note-tool-item, изменить стиль на touchnote-update, удалить стиль на touchnote-delete |
addNoteEleFn | Функция(noteEle, noteContainerEle, root, ele, options) | Событие добавления элемента области заметок. Параметры (noteEle, noteContainerEle, root, options, datas), noteEle — элемент jQuery области заметок, noteContainerEle — контейнер jQuery объекта, root — корневой элемент, options — конфигурация |
noteUpdateFn | Функция(noteEle, itemEle, root, options) | Обновление заметки. Параметры (noteEle, itemEle, root, options), noteEle — объект заметки, itemEle — элемент операции, root — корневой элемент, options — конфигурация |
noteDeleteFn | Функция(noteEle, itemEle, root, options) | Удаление заметки. Параметры (noteEle, itemEle, root, options), noteEle — объект заметки, itemEle — элемент операции, root — корневой элемент, options — конфигурация |
noteClickOtherFn | Функция(noteEle, itemEle, root, options) | Другие методы заметки. Параметры (noteEle, itemEle, root, options), noteEle — объект заметки, itemEle — элемент операции, root — корневой элемент, options — конфигурация |
addNoteEle | Функция(data, index, datas, noteContainerEle, root, ele, options) | Добавление содержимого области заметок. Параметры (data, index, noteContainerEle, root, options, datas), data — данные, index — индекс, datas — все данные, noteContainerEle — объект jQuery контейнера, root — корневой элемент, options — конфигурация |
updateNotesCount | Функция(count, datas, root, options) | Обновить общее количество заметок. Параметры (count, datas, root, options), count — общее количество, datas — выделенные данные, root — корневой элемент, options — конфигурация |
refreshNotesCount | Функция(count, datas, root, options) | Обновите общее количество областей заметок. Параметры (count, datas, root, |
options), count — общее количество, datas — выделенные данные, root — корневой элемент, options — конфигурация ### Плагин-метод |
Метод | Описание параметров | Значение |
---|---|---|
$(dom).touchNote() | См. описание параметров выше | Метод инициализации плагина |
$(dom).getSelection() | — | Метод получения выделенного содержимого объекта jQuery с комментариями |
hldatas представлен в формате массива.
Пример: nid — это первичный ключ данных, keyid — это ключ touchNote, который является его первичным ключом, keycode сохраняет информацию о местоположении, при отправке данных будет происходить упаковка, можно обратить внимание на просмотр консоли, remarks — добавленные примечания, userid — идентификатор пользователя (обычно предоставляется проектом), username — имя пользователя (обычно предоставляется проектом), createtime — время создания.
Выделенный текст можно получить в keycode.text или использовать touchNote.getSelectionText() для получения текущего выделенного содержимого.
var notesdata = [
{
'nid': '1',
'keyid': "tn-1628153524469",
'keycode': {
'startMeta': {
'parentTagName': 'DIV',
'parentIndex': -2,
'textOffset': 41
},
'endMeta': {
'parentTagName': 'DIV',
'parentIndex': -2,
'textOffset': 56
}
},
'remarks': 'Изображение',
'userid': 2,
'username': 'Заяц',
'createtime': '2021-07-05 09:12:17.0'
},
{
'nid': '2',
'keyid': "h1625464240253",
'keycode': {
'startMeta': {
'parentTagName': 'DIV',
'parentIndex': -2,
'textOffset': 64
},
'endMeta': {
'parentTagName': 'DIV',
'parentIndex': -2,
'textOffset': 68
}
},
'remarks': 'Следующее слово <span>с тегом',
'userid': 3,
'username': 'Супер',
'createtime': '2021-07-05 13:51:01.0'
}
];
// Инициализация
var annotate = $("#container").touchNote({});
// Получение выделенной области
var data = annotate.getSelection();
// Результат объекта selection, можно получить объект range (обратите внимание, что это не оригинальный объект range JavaScript), выделенный текст и выбранный узел и т. д.
{
selection: объект selection JavaScript,
range = {
startContainer: начальный узел,
startOffset: смещение начального узла,
endContainer: конечный узел,
endOffset: смещение конечного узла,
domRect: информация о местоположении
},
selectedNodes: выбранные узлы,
text: выделенный текст
}
// Также можно напрямую использовать класс инструментов для получения выделенного текста
touchNote.getSelectionText();
// Удалить выделение с указанным идентификатором, если выделение с соответствующим идентификатором не существует, вернуть false, rootEle — вызываемый объект jQuery, callback — метод обратного вызова
touchNote.removeHighlight(rootEle, id, callback);
// Удалить все выделения, rootEle — вызываемый объект jQuery, callback — метод обратного вызова
touchNote.removeAllHighlight(rootEle, callback);
Обычно данные, используемые в процессе, необходимо сохранить в базе данных. В этом примере сохранение не выполняется, но если оно требуется, вы можете переопределить пустой метод submitData.
$("#container").touchNote({
// Успешная отправка возвращает true, неудачная отправка возвращает false
submitData: function(remarks, keytype, params, ele, dialogEle, options) {
// Здесь вы можете реализовать свой собственный ajax
console.log("Данные отправлены, например, сохранены в базе данных и т.д., в официальной среде рекомендуется переопределить", remarks, keytype, params);
return true;
}
});
Если вам нужно переписать всплывающее окно, которое не соответствует требованиям, вы можете обратиться к примеру codereview.html и переписать всплывающие окна и методы отправки.
Выделение:
Комментарии:
Эффект изображения:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )