SliceMsgToLastMsg.js 1.4 KB
Newer Older
DCloud_JSON's avatar
1.2.4  
DCloud_JSON 已提交
1 2
export default class SliceMsgToLastMsg {
	constructor(arg) {
DCloud_JSON's avatar
1.2.5  
DCloud_JSON 已提交
3 4
		this.$ = arg
		//分割显示的速度(毫秒)
DCloud_JSON's avatar
1.2.7  
DCloud_JSON 已提交
5
		this.t = 70
DCloud_JSON's avatar
1.2.5  
DCloud_JSON 已提交
6 7 8 9
		// 要追加的消息的创建时间
		this.msgCreateTime = false
		// 是否立即结束追加
		this.stopAction = false
DCloud_JSON's avatar
1.2.4  
DCloud_JSON 已提交
10 11 12 13 14
	}
	// 所有待插入的消息数据
	msgs = ''
	// 是否正在分割消息数据
	sliceMsgIng = false
DCloud_JSON's avatar
1.2.5  
DCloud_JSON 已提交
15
	addMsg(msg) {
DCloud_JSON's avatar
1.2.4  
DCloud_JSON 已提交
16 17 18 19 20
		// console.log('msg', msg);
		this.msgs += msg
		if (this.sliceMsgIng === false) {
			this.sliceMsg()
		}
DCloud_JSON's avatar
1.2.5  
DCloud_JSON 已提交
21 22 23 24 25 26 27 28
	}
	end(){
		this.stopAction = true
	}
	sliceMsg() {
		if(this.stopAction === true){
			return //console.log('被终止');
		}
29 30 31
		this.sliceMsgIng = true
    const msgsArr = this.msgs.split(/(?<=\p{Script=Han})|(?=\p{Script=Han})/gu);
		let msg = msgsArr.reverse().pop()
DCloud_JSON's avatar
1.2.4  
DCloud_JSON 已提交
32 33 34
		// console.log('msg', msg);
		// 更新最后一条消息的内容
		// console.log('this.$', this.$);
DCloud_JSON's avatar
1.2.5  
DCloud_JSON 已提交
35 36 37 38 39
		this.$.updateLastMsg(lastMsg => {
			if(this.msgCreateTime && this.msgCreateTime != lastMsg.create_time){
				return //console.log('要追加的消息不存在了,停止');
			}
			this.msgCreateTime = lastMsg.create_time
DCloud_JSON's avatar
1.2.4  
DCloud_JSON 已提交
40
			lastMsg.content += msg
DCloud_JSON's avatar
1.2.5  
DCloud_JSON 已提交
41 42
		})
		this.$.showLastMsg()
43
		this.msgs = msgsArr.reverse().join('')
DCloud_JSON's avatar
1.2.5  
DCloud_JSON 已提交
44 45 46 47 48 49 50 51
		if (this.msgs.length) {
			if(this.t){
				setTimeout(() => {
					this.sliceMsg(this.msgs)
				}, this.t);
			}else{
				this.sliceMsg(this.msgs)
			}
DCloud_JSON's avatar
1.2.4  
DCloud_JSON 已提交
52 53 54 55 56
		} else {
			this.sliceMsgIng = false
		}
	}
}