var hasLastCheckReturned = true;
var lastCheckedTime = 0;
setTimeout(function(){
if(!hasLastCheckReturned){
return; // 上次还没返回结果。放弃这次请求。
}
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]); // 把增量弹幕每一个都插入
};
lastCheckedTime = Date.now(); // 更新上次检测的时间
hasLastCheckReturned = true;
} else {
// 可能出了问题
hasLastCheckReturned = true;
}
}
};
xhr.open('GET', 'http://yoururl/somevideoid/?from=' + lastCheckedTime, true); // 告诉服务器上次检查的时间,来获取增量
xhr.send(); // 发送请求
hasLastCheckReturned = false;
}, 3000); // 每3s检查新的弹幕
以及:
// 基于 socket.io 和 JQuery来简化代码
var socket = io(); //开启流
socket.on('danmaku', function(data){
// 当遇到 danmaku 事件,就把推送来的弹幕推送给 CCL
var danmaku = yourFormatParser(data);
CM.insert(danmaku);
});
$('#send-danmaku-btn').click(function(){
//当按了发送弹幕的按钮
var data = {
"text":"获取信息。。"
...
};// 通过UI获取新弹幕的信息
//包装并发射弹幕
socket.emit('send-danmaku', JSON.stringify(yourFormatPackager(data));
//清除 UI 文字部分
$('#send-danmaku-field').value("");
});
加好友 1098271199 一起交流讨论吧