这些天需要做一个视频弹幕的功能,找到了js的一个插件——Danmuplayer.js,这个插件非常的实用,但是当你要获取数据库弹幕或者发送弹幕给数据库的时候(我用的ssm框架),怎么做?
在博客上看了一下,有一位大佬用的是Ssh框架,后台打印给界面,视频展示弹幕,当时照猫画虎也像他做了一遍,但是Spring控制层中没有ServletActionContext这个属性(SSH特有),就只用的response.getWriter();
out.println(拼接的json数据);(在这里我要吐槽一下Danmuplayer这个插件如何用urlgetdanmu去获取json,他的每一个数据都要用’'单引号包起来,你正常的ResponseBody他不识别,显示不出来)
发现确实显示了弹幕,但是显示了两遍(我分析是因为他响应了一遍,然后打印了一遍)当然不能这么使用,又用的servletoutputStream发现可以打印给页面,响应也正确,但是视频弹幕就是不出来。
php也不会,现学的话,还要给eclipse搭环境就自己想了另一个办法:注意注意!!!实用的代码来了!!!
function getData(id){
var video_id=id;这是我要传的视频id
console.log("视频id"+video_id);
var defer = $.Deferred();//jquery内置的一个属性,可以把ajax请求成功的参数给ajax之外的参数
$.ajax({
url: ".请求的路径", // 模拟请求action后响应的json数据
data: {"data":数据}, // 请求的参数,可以是不同的形式
type: "GET",
//dataType: "json", // 预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,这里设置为 json
async: true, // 特别注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
success: function(result){
defer.resolve(result); //解决Deferred(延迟)对象,并根据给定的参数调用任何 doneCallbacks 回调函数
//这个函数会在 延迟对象即ajax 执行完毕后,在调用回调函数的时候 将参数值 result 传递给回调方法
}
});
return defer.promise();
}
$("#danmup").DanmuPlayer({
src : "../../"+as+"", //视频源
width : 500, //视频宽度
height : 445,//视频高度
//urlToGetDanmu:"../../handler/getDanmu?data="+as+"" ,//获取弹幕
//urlToPostDanmu:"../../handler/postDanmu"//发送弹幕
//不使用这两个内置的方法
});
var responseData;
$.when(getData(id)).done(function(result){
responseData = result;
console.log(responseData);
$("#danmup .danmu-div").danmu("addDanmu",responseData)//这是自动加弹幕我的responseData就是后台的数据
}).fail(function(){
alert("$.get 失败!");
});
这是我下载的时候,他自己有的属性,可以用过"addDanmu",把后面的弹幕加到视频中
但是我把这个json拿了出来,赋值给一个变量a,然后
$("#danmup .danmu-div").danmu("addDanmu",a)
$("#danmup .danmu-div").danmu("addDanmu",[
{ "text":"这是滚动弹幕" ,color:"white",size:1,position:0,time:2}
,{ "text":"我是帽子绿" ,color:"green",size:1,position:0,time:3}
,{ "text":"哈哈哈啊哈" ,color:"black",size:1,position:0,time:10}
,{ "text":"这是顶部弹幕" ,color:"yellow" ,size:1,position:1,time:3}
,{ "text":"这是底部弹幕" , color:"red" ,size:1,position:2,time:9}
,{ "text":"大家好,我是伊藤橙" ,color:"orange",size:1,position:1,time:3}
])
也就是说,你可以把后台请求的数据单独给一个变量,然后放到addDanmu中去,这是我的解决思路,也完全实现了存储和播放两个功能。下面是效果图: