canvas 弹幕效果(实例分享)


Posted in Javascript onJanuary 11, 2017

话不多说,请看代码

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
 <canvas style="width: 1280px;height: 720px;background-color: rgba(0,0,0,0.2)">你的浏览器不支持canvas</canvas>
</body>
<script src="http://www.jq22.com/jquery/jquery-1.10.2.js"></script>
<script>
 (function ($) {
 function Barrager(dom) {
 this.canvas = dom.get(0);
 this.ctx = this.canvas.getContext("2d");
 this.msgs = new Array(300);//缓冲池,长度越大,屏幕上显示的就越多
 this.width = 1280;//canvas分辨率1280*720
 this.height = 720;
 this.canvas.width=this.width;//上边的两步可以省略,直接在这里赋值
 this.canvas.height=this.height;
 this.font = "30px 黑体";//字体和字体大小
 this.ctx.font=this.font;
 //颜色数组,在绘制过程中随机从这里取出颜色
 this.colorArr=["Olive","OliveDrab","Orange","OrangeRed","Orchid","PaleGoldenRod","PaleGreen","PaleTurquoise","PaleVioletRed","PapayaWhip","PeachPuff","Peru","Pink","Plum","PowderBlue","Purple","Red","RosyBrown","RoyalBlue","SaddleBrown","Salmon","SandyBrown","SeaGreen","SeaShell","Sienna","Silver","SkyBlue"];
 this.interval = "";
 this.draw = function () {//绘制方法
  if (this.interval != "")return;
  var _this=this;
  this.interval = setInterval(function () {//每隔20毫秒重新绘制一次,间隔最好小于40,要不然效果就跟播放图片差不多
  //1,清除屏幕
  _this.ctx.clearRect(0, 0, _this.width, _this.height);
  _this.ctx.save();
  //2,循环缓冲区域,把没有设置Left,Top,Speed,Color先赋值,赋值的就改变left值(产生移动效果),left值小于200就会从缓冲区移除
  for (var i = 0; i < _this.msgs.length; i++) {
   if (!(_this.msgs[i] == null || _this.msgs[i] == "" || typeof(_this.msgs[i]) == "undefined")) {
   if(_this.msgs[i].L==null || typeof(_this.msgs[i].L)=="undefined"){
    _this.msgs[i].L=_this.width;
    _this.msgs[i].T=parseInt(Math.random() * 700);
    _this.msgs[i].S=parseInt(Math.random() * (10 - 4) + 4);
    _this.msgs[i].C=_this.colorArr[Math.floor(Math.random() * _this.colorArr.length)];
   }else{
    if(_this.msgs[i].L<-200){
    _this.msgs[i]=null;
    }else {
    _this.msgs[i].L=parseInt(_this.msgs[i].L-_this.msgs[i].S);
    _this.ctx.fillStyle =_this.msgs[i].C;
    _this.ctx.fillText(_this.msgs[i].msg,_this.msgs[i].L,_this.msgs[i].T);
    _this.ctx.restore();
    }
   }
   }
  }
  }, 20);
 };
 //添加数据,数据格式[{"msg":"nihao"}]
 this.putMsg = function (datas) {//循环缓冲区,把位置是空的装填上数据
  for (var j = 0; j < datas.length; j++) {
  for (var i = 0; i < this.msgs.length; i++) {
   if (this.msgs[i] == null || this.msgs[i] == "" || typeof(this.msgs[i]) == "undefined") {
   this.msgs[i] = datas[j];
   break;
   }
  }
  }
  this.draw();
 };
 this.clear = function () {//清除定时器,清除屏幕,清空缓冲区
  clearInterval(this.interval);
  this.interval="";
  this.ctx.clearRect(0, 0, this.width, this.height);
  this.ctx.save();
  for(var i=0;i<this.msgs.length;i++){
  this.msgs[i]=null;
  }
 };
 }
 $.fn.barrager = function (para) {
 if (typeof(para)=="string") {
  try{
  var api = $(this).data('barrager_api');
  api[para].apply(api);
  }catch (e){}
 } else if (typeof para == 'object' || !para) {
  $this = $(this);
  if ($this.data('barrager_api') != null && $this.data('barrager_api') != ''){
  var api = $this.data('barrager_api');
  api.putMsg(para);
  }else{
  var api = new Barrager($this);
  $this.data('barrager_api', api);
  api.putMsg(para);
  }
 } else {
  $.error('Method ' + method + ' does not exist on jQuery.slidizle');
 }
 return this;
 }
})(jQuery);
</script>
<script>
 // $('canvas').barrager([{"msg":"这是我发的。。。哈哈哈"}]);// 发送弹幕
 
 $('canvas').barrager([{"msg":"看着不错。。。。"},{"msg":"哈哈哈。。。。"},{"msg":"不错不错。。"},{"msg":"真好看。。。。"}]);//多条发送方式

 // $('canvas').barrager("clear"); //清除/关闭弹幕
</script>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
jQuery函数的等价原生函数代码示例
May 27 Javascript
js获取location.href的参数实例代码
Aug 02 Javascript
JQuery遍历json数组的3种方法
Nov 08 Javascript
javascript与Python快速排序实例对比
Aug 10 Javascript
详解AngularJS中自定义过滤器
Dec 28 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
Feb 15 Javascript
JS实现AES加密并与PHP互通的方法分析
Apr 19 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
Apr 23 Javascript
layui 给数据表格加序号的方法
Aug 20 Javascript
详解jQuery中的easyui
Sep 02 jQuery
cordova+vue+webapp使用html5获取地理位置的方法
Jul 06 Javascript
JavaScript+HTML实现学生信息管理系统
Apr 20 Javascript
JQuery实现动态操作表格
Jan 11 #Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
Jan 11 #Javascript
JavaScript中的call和apply的用途以及区别
Jan 11 #Javascript
Vue数据驱动模拟实现2
Jan 11 #Javascript
jQuery实现对象转为url参数的方法
Jan 11 #Javascript
将鼠标焦点定位到文本框最后(代码分享)
Jan 11 #Javascript
移动端界面的适配
Jan 11 #Javascript
You might like
谈谈PHP的输入输出流
2007/02/14 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
javascript 日期时间函数(经典+完善+实用)
2009/05/27 Javascript
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
传智播客学习之java 反射
2009/11/22 Javascript
简略说明Javascript中的= =(等于)与= = =(全等于)区别
2013/04/16 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
2016/06/20 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
Bootstrap table使用方法记录
2017/08/23 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
layui(1.0.9)文件上传upload,前后端的实例代码
2019/09/26 Javascript
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
python 生成目录树及显示文件大小的代码
2009/07/23 Python
python利用装饰器进行运算的实例分析
2015/08/04 Python
python web基础之加载静态文件实例
2018/03/20 Python
Python版名片管理系统
2018/11/30 Python
深入浅析Python中的迭代器
2019/06/04 Python
使用 django orm 写 exists 条件过滤实例
2020/05/20 Python
如何通过python检查文件是否被占用
2020/12/18 Python
10张动图学会python循环与递归问题
2021/02/06 Python
新闻专业应届生求职信
2013/10/31 职场文书
个人求职信范文分享
2014/01/31 职场文书
2014年班主任工作总结
2014/11/08 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书