|
|
@@ -51,17 +51,18 @@ const renderComments = (ids) => {
|
|
|
cmts = JSON.parse(cmts)
|
|
|
}
|
|
|
|
|
|
- ids.forEach(id => {
|
|
|
+ ids.forEach(commentData => {
|
|
|
let text = ''
|
|
|
cmts.find((item) => {
|
|
|
- if (item.id === id) {
|
|
|
+ if (item.id === commentData.id) {
|
|
|
text = item.text
|
|
|
return true
|
|
|
}
|
|
|
})
|
|
|
|
|
|
const cmtElement = document.createElement('div')
|
|
|
- cmtElement.setAttribute('data-id', id)
|
|
|
+ cmtElement.setAttribute('data-id', commentData.id)
|
|
|
+ cmtElement.setAttribute('style', `top:${commentData.top}px`)
|
|
|
cmtElement.innerHTML = `<div>
|
|
|
${text}<br>
|
|
|
<button>删除</button><br>
|
|
|
@@ -70,49 +71,95 @@ ${text}<br>
|
|
|
cmtElement.value = text
|
|
|
document.getElementById('comments').
|
|
|
insertAdjacentElement('beforeend', cmtElement)
|
|
|
+ // 高度调整
|
|
|
+ const previousElement = cmtElement.previousElementSibling
|
|
|
+ if (previousElement) {
|
|
|
+ const previousTop = parseInt(previousElement.style.top) +
|
|
|
+ previousElement.clientHeight + 20
|
|
|
+ if (previousTop > commentData.top) {
|
|
|
+ cmtElement.style.top = previousTop + 'px'
|
|
|
+ }
|
|
|
+ }
|
|
|
bindCommentEvent(cmtElement)
|
|
|
})
|
|
|
+
|
|
|
+ document.getElementById('comments').addEventListener("scroll", () => {
|
|
|
+ window.vditor.vditor.wysiwyg.element.scrollTop = document.getElementById('comments').scrollTop
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+const matchCommentsTop = (commentsData) => {
|
|
|
+ commentsData.forEach((item) => {
|
|
|
+ const commentElement = document.querySelector(
|
|
|
+ `#comments div[data-id="${item.id}"]`)
|
|
|
+ commentElement.setAttribute('style', `top:${item.top}px`)
|
|
|
+ // 高度调整
|
|
|
+ const previousElement = commentElement.previousElementSibling
|
|
|
+ if (previousElement) {
|
|
|
+ const previousTop = parseInt(previousElement.style.top) +
|
|
|
+ previousElement.clientHeight + 20
|
|
|
+ if (previousTop > item.top) {
|
|
|
+ commentElement.style.top = previousTop + 'px'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ document.getElementById('comments').scrollTop = window.vditor.vditor.wysiwyg.element.scrollTop
|
|
|
}
|
|
|
|
|
|
window.vditor = new Vditor('vditor', {
|
|
|
- // _lutePath: `http://192.168.0.107:9090/lute.min.js?${new Date().getTime()}`,
|
|
|
- _lutePath: 'src/js/lute/lute.min.js',
|
|
|
+ _lutePath: `http://192.168.0.107:9090/lute.min.js?${new Date().getTime()}`,
|
|
|
+ // _lutePath: 'src/js/lute/lute.min.js',
|
|
|
mode: 'wysiwyg',
|
|
|
- height: window.innerHeight + 100,
|
|
|
- outline: true,
|
|
|
debugger: true,
|
|
|
typewriterMode: true,
|
|
|
placeholder: 'Hello, Vditor!',
|
|
|
comment: {
|
|
|
enable: true,
|
|
|
- add (id, text) {
|
|
|
- const cmtElement = document.createElement('div')
|
|
|
- cmtElement.setAttribute('data-id', id)
|
|
|
- cmtElement.innerHTML = `<div>
|
|
|
+ add (id, text, commentsData) {
|
|
|
+ commentsData.find((item, index) => {
|
|
|
+ if (item.id === id) {
|
|
|
+ const cmtElement = document.createElement('div')
|
|
|
+ cmtElement.setAttribute('data-id', id)
|
|
|
+ cmtElement.innerHTML = `<div>
|
|
|
${text}<br>
|
|
|
<button>删除</button><br>
|
|
|
<input>
|
|
|
</div>`
|
|
|
- cmtElement.value = text
|
|
|
- document.getElementById('comments').
|
|
|
- insertAdjacentElement('beforeend', cmtElement)
|
|
|
- bindCommentEvent(cmtElement)
|
|
|
- cmtElement.querySelector('input').focus()
|
|
|
- let cmts = localStorage.getItem('cmts')
|
|
|
- if (!cmts) {
|
|
|
- localStorage.setItem('cmts', '[]')
|
|
|
- cmts = []
|
|
|
- } else {
|
|
|
- cmts = JSON.parse(cmts)
|
|
|
- }
|
|
|
- cmts.push({id, text})
|
|
|
- localStorage.setItem('cmts', JSON.stringify(cmts))
|
|
|
+ cmtElement.value = text
|
|
|
+ if (index === 0) {
|
|
|
+ document.querySelector('#comments').
|
|
|
+ insertAdjacentElement('beforeend', cmtElement)
|
|
|
+ } else {
|
|
|
+ document.querySelector(
|
|
|
+ `#comments div[data-id="${commentsData[index - 1].id}"]`).
|
|
|
+ insertAdjacentElement('afterend', cmtElement)
|
|
|
+ }
|
|
|
+ bindCommentEvent(cmtElement)
|
|
|
+ cmtElement.querySelector('input').focus()
|
|
|
+ let cmts = localStorage.getItem('cmts')
|
|
|
+ if (!cmts) {
|
|
|
+ localStorage.setItem('cmts', '[]')
|
|
|
+ cmts = []
|
|
|
+ } else {
|
|
|
+ cmts = JSON.parse(cmts)
|
|
|
+ }
|
|
|
+ cmts.push({id, text})
|
|
|
+ localStorage.setItem('cmts', JSON.stringify(cmts))
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ })
|
|
|
+ matchCommentsTop(commentsData)
|
|
|
},
|
|
|
remove (ids) {
|
|
|
ids.forEach((id) => {
|
|
|
removeComment(document.querySelector(`#comments div[data-id="${id}"]`),
|
|
|
id)
|
|
|
})
|
|
|
+ matchCommentsTop(window.vditor.getCommentIds())
|
|
|
+ },
|
|
|
+ scroll (top) {
|
|
|
+ document.getElementById('comments').scrollTop = top
|
|
|
},
|
|
|
},
|
|
|
after () {
|