// uid列表 TODO 优化查询性能 let uidList = {} // 事件列表-中文 let eventTextList = ['切歌', '跳跃', '向左', '向右', '左抖腿', '右抖腿', '抖动', '一起喊', '镜头'] // 根据事件文字 获取事件名 function getEvent(name) { let map = { '切歌' : 'change_song', '跳跃' : 'dancing-down', '向左' : 'dancing-left', '向右' : 'dancing-right', '左抖腿' : 'dancing-wobble', '右抖腿' : 'dancing-wobble-right', '抖动' : 'dancing-up', '一起喊' : 'all_shout', '镜头' : scale() } } // 随机选择镜头 function scale() { let list = ['scale-left', 'scale-right', 'scale-bottom-left', 'scale-bottom-right'] return list[Math.floor(Math.random() * list.length)]; } // 字符串包含的事件 (仅取第一个) function getFirstEventKeyword(name) { let event = '' $.each(eventTextList, function (index, item) { if (name.indexOf(item) != -1) { event = item return false } }) return event } // 接受消息处理 function receiveMessage(event) { console.log(event.data, 'event test') // 我们能信任信息来源吗? if (event.origin !== "https://live.bilibili.com") { return false } let data = JSON.parse(event.data) if (data.length <= 0) { return false } // 当前直播间 自己的弹幕 无法获取到ct和type值 就暂时过滤 if (data.ct === '') { return false } // custom.js中 每条弹幕的处理 放到了此处 // -------------------- 每条弹幕处理 begin ----------------------- let random1 = data.uid in uidList ? 1 : 0 let random2 = Math.floor(Math.random() + 0.5) let dm = {text: data.danmaku, uid: data.uid, uname: data.uname, event: getFirstEventKeyword(data.danmaku), is_new: random1, is_admin: 0, is_exit: random2} let leader = { uid: '1111', uname: '大帅比', text: '6666', event: '' } let actionIndex = Math.floor(Math.random()*actionArr.length); let moveIndex = Math.floor(Math.random()*moveArr.length); peopleObj(dm.uname,dm.text,actionArr[actionIndex],moveArr[moveIndex]); num++; $('.lingname').text(leader.uname); if(leader.event=='scale-left' || leader.event=='scale-right' || leader.event=='scale-bottom-left' || leader.event=='scale-bottom-right'){ $('.ground-bg').addClass(leader.event); } else { setTimeout(()=>{ console.log(leader.event); // 显示领舞说话 $('.speak-pink').text(leader.text); $('.speak-pink').fadeIn(); setTimeout(()=>{//关闭领舞说话 $('.speak-pink').fadeOut(); },3000) allDancing(leader.event); },3000) } // -------------------- 每条弹幕处理 end ----------------------- // event.source 就当前弹出页的来源页面 // event.data 是 "hello there!" // 假设你已经验证了所受到信息的origin (任何时候你都应该这样做), 一个很方便的方式就是把event.source // 作为回信的对象,并且把event.origin作为targetOrigin // event.source.postMessage("hi there yourself! the secret response " + // "is: rheeeeet!", // event.origin); // 数据是否为空 // 弹幕类型判断 事件弹幕、内容弹幕 } window.addEventListener("message", receiveMessage, false);