var hasLastCheckReturned = true;
????var lastCheckedTime = 0;
????setTimeout(function(){
???? if(!hasLastCheckReturned){
???? return; // 上次還沒返回結(jié)果。放棄這次請(qǐng)求。
???? }
???? var xhr = new XMLHttpRequest();
???? xhr.onreadystatechange = function(){
???? if(xhr.readyState === 4){
???? if(xhr.responseCode === 200){
???? // 解析彈幕
???? var danmakuList = yourFormatParser(xhr.responseText);
???? for(var i = 0; i < danmakuList.length; i++){
???? CM.insert(danmakuList[i]); // 把增量彈幕每一個(gè)都插入
???? };
???? lastCheckedTime = Date.now(); // 更新上次檢測的時(shí)間
???? hasLastCheckReturned = true;
???? } else {
???? // 可能出了問題
???? hasLastCheckReturned = true;
???? }
???? }
???? };
???? xhr.open('GET', 'http://yoururl/somevideoid/?from=' + lastCheckedTime, true); // 告訴服務(wù)器上次檢查的時(shí)間,來獲取增量
???? xhr.send(); // 發(fā)送請(qǐng)求
???? hasLastCheckReturned = false;
????}, 3000); // 每3s檢查新的彈幕
????
以及:
?
????// 基于 socket.io 和 JQuery來簡化代碼
????
????var socket = io(); //開啟流
????
????socket.on('danmaku', function(data){
???? // 當(dāng)遇到 danmaku 事件,就把推送來的彈幕推送給 CCL
???? var danmaku = yourFormatParser(data);
???? CM.insert(danmaku);
????});
????
????$('#send-danmaku-btn').click(function(){
???? //當(dāng)按了發(fā)送彈幕的按鈕
???? var data = {
???? "text":"獲取信息。。"
???? ...
???? };// 通過UI獲取新彈幕的信息
????
???? //包裝并發(fā)射彈幕
???? socket.emit('send-danmaku', JSON.stringify(yourFormatPackager(data));
????
???? //清除 UI 文字部分
???? $('#send-danmaku-field').value("");
????});
加好友 1098271199?? 一起交流討論吧?