纯js封装的聊天框,兼容各大框架适用,适配pc与h5的交互





|-- chat-area
|
|-- es5 // 低版本浏览器兼容
| |-- ChatArea.css
| |-- ChatArea.js
| |-- System.js
|
|-- lib
| |-- ChatArea.css
| |-- ChatArea.js
|
|-- demo.html // 示例页
|-- es5.html // ES5示例引用方法
npm i --save chatarea
import ChatArea from 'chatarea'
import 'chatarea/lib/ChatArea.css'
const chat = new ChatArea({
elm: document.getElementById('id'),
userList: [
{ id: '1', name: '张三', avatar: 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png', pinyin: 'song song' },
{ id: '2', name: '李四' },
{ id: '3', name: 'jianfv' }
],
placeholder: '请输入文本框内容',
maxLength: 2000,
asyncMatch: false,
customTrigger: [
{
dialogTitle: '群话题',
prefix: '#',
tagList: [
{ id: 'ht1', name: '话题一', pinyin: 'hua ti yi' },
{ id: 'ht2', name: '话题二', pinyin: 'hua ti er' }
]
}
],
selectList: [
{
dialogTitle: '比例',
key: 'ratio',
options: [
{ id: '1', name: '4:3', preview: 'preview url' },
{ id: '2', name: '16:9', preview: 'preview url' },
]
}
],
copyType: ['text', 'image'],
userProps: {
id: 'id',
name: 'name',
avatar: 'avatar',
pinyin: 'pinyin'
},
needDialog: true,
needCallEvery: true,
needCallSpace: false,
needDebounce: true,
wrapKeyFun: (event) => event.ctrlKey && ['Enter'].includes(event.key),
sendKeyFun: (event) => !event.ctrlKey && ['Enter'].includes(event.key)
})
chat.updateConfig({
userProps: { id: 'userId', name: 'userName' },
userList: [{ userId: 'NEW1', userName: '新的人员' }],
customTrigger: [{ dialogTitle: '群话题', prefix: '#', tagList: [] }],
selectList: [{ dialogTitle: '比例', key: 'ratio', options: [] }],
needCallEvery: false,
placeholder: '新的提示语',
maxLength: 3000,
})
chat.getText()
chat.getHtml()
chat.getCallUserList()
chat.getCallUserTagList()
chat.getCustomTagList()
chat.getSelectTagList()
chat.reverseAnalysis('getHtml return value', true)
chat.insertHtml(`<img src="${url}" alt="404" />`)
chat.insertText('txt')
chat.setUserTag({ id: '1', name: '松松' })
chat.setCustomTag({ id: 'ht1', name: '话题1' }, '#')
chat.setSelectTag({ id: '1', name: '4:3' }, 'ratio')
chat.delUserTags(['1'])
chat.delCustomTags('#', ['ht1'])
chat.delSelectTags('ratio', ['1'])
chat.clear()
chat.isEmpty()
chat.dispose()
chat.disabled()
chat.enable()
chat.addEventListener('operate', () => {})
chat.removeEventListener('operate', () => {})
chat.showPCPointDialog()
chat.showPCCheckDialog()
chat.showPCCustomTagDialog('#')
chat.showH5Dialog()
chat.undo()
chat.redo()
chat.revisePCPointDialogLabel({
title: '群成员',
callEveryLabel: '所有人',
checkLabel: '多选',
emptyLabel: '暂无数据'
})
chat.revisePCCheckDialogLabel({
title: '选择要@的人',
searchPlaceholder: '搜素人员名称',
searchEmptyLabel: '没有匹配到任何结果',
userTagTitle: '研讨成员列表',
checkAllLabel: '全选',
checkEmptyLabel: '请选择需要@的成员',
confirmLabel: '确定',
cancelLabel: '取消'
})
chat.reviseH5DialogLabel({
title: '选择提醒的人',
callEveryLabel: '所有人',
searchPlaceholder: '搜素人员名称',
searchEmptyLabel: '没有匹配到任何结果',
confirmLabel: '确定',
cancelLabel: '收起'
})
chat.addEventListener('defaultAction', (type) => {
switch (type) {
case 'COPY':
return 'PREVENT'
case 'CUT':
return 'PREVENT'
case 'PASTE':
return 'PREVENT'
case 'UNDO':
return 'PREVENT'
case 'REDO':
return 'PREVENT'
}
})