if (document.querySelector(".comment-barrage")) { var commentBarrageConfig = { maxBarrage: GLOBAL_CONFIG.commentBarrageConfig.maxBarrage, barrageTime: GLOBAL_CONFIG.commentBarrageConfig.barrageTime, twikooUrl: GLOBAL_CONFIG.twikooEnvId, accessToken: GLOBAL_CONFIG.commentBarrageConfig.accessToken, mailMd5: GLOBAL_CONFIG.commentBarrageConfig.mailMd5, pageUrl: window.location.pathname, barrageTimer: [], barrageList: [], barrageIndex: 0, dom: document.querySelector(".comment-barrage"), }; var commentInterval = null; var hoverOnCommentBarrage = false; document.querySelector(".comment-barrage").addEventListener("mouseenter", function () { hoverOnCommentBarrage = true; }); document.querySelector(".comment-barrage").addEventListener("mouseleave", function () { hoverOnCommentBarrage = false; }); function initCommentBarrage() { if (!commentBarrageConfig.dom) return; var data = JSON.stringify({ event: "COMMENT_GET", "commentBarrageConfig.accessToken": commentBarrageConfig.accessToken, url: commentBarrageConfig.pageUrl, }); var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { if (this.readyState === 4 && this.responseText) { commentBarrageConfig.barrageList = commentLinkFilter(JSON.parse(this.responseText).data); commentBarrageConfig.dom.innerHTML = ""; } }); xhr.open("POST", commentBarrageConfig.twikooUrl); xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data); clearInterval(commentInterval); commentInterval = null; commentInterval = setInterval(() => { if (commentBarrageConfig.barrageList.length && !hoverOnCommentBarrage) { popCommentBarrage(commentBarrageConfig.barrageList[commentBarrageConfig.barrageIndex]); commentBarrageConfig.barrageIndex += 1; commentBarrageConfig.barrageIndex %= commentBarrageConfig.barrageList.length; } if ( commentBarrageConfig.barrageTimer.length > (commentBarrageConfig.barrageList.length > commentBarrageConfig.maxBarrage ? commentBarrageConfig.maxBarrage : commentBarrageConfig.barrageList.length) && !hoverOnCommentBarrage ) { removeCommentBarrage(commentBarrageConfig.barrageTimer.shift()); } }, commentBarrageConfig.barrageTime); } function commentLinkFilter(data) { data.sort((a, b) => { return a.created - b.created; }); let newData = []; data.forEach(item => { newData.push(...getCommentReplies(item)); }); return newData; } function getCommentReplies(item) { if (item.replies) { let replies = [item]; item.replies.forEach(item => { replies.push(...getCommentReplies(item)); }); return replies; } else { return []; } } function popCommentBarrage(data) { let barrage = document.createElement("div"); barrage.className = "comment-barrage-item"; barrage.innerHTML = `