js cavans实现静态滚动弹幕


Posted in Javascript onMay 21, 2020

本文实例为大家分享了js实现静态滚动弹幕的具体代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
 <!-- 弹幕文字 -->
<div class="video-x"></div> 
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
// 弹幕
 var dataBarrage = [{
  value: "使用的是静态死数据",
  color: "blue",
  range: [0, 0.5]
 },
 {
  value: "随机循环播放",
  color: "blue",
  range: [0, 0.6]
 },
 {
  value: "可以控制区域和垂直分布范围",
  color: "blue",
  range: [0, 0.5]
 },
 {
  value: "字体大小和速度在方法内设置",
  color: "black",
  range: [0.1, 1]
 },
 {
  value: "适合用在一些静态页面上",
  color: "black",
  range: [0.2, 1]
 },
 {
  value: "基于canvas实现",
  color: "black",
  range: [0.2, 0.9]
 },
 {
  value: "因此IE9+浏览器才支持",
  color: "black",
  range: [0.2, 1]
 },
 {
  value: "可以设置边框颜色",
  color: "black",
  range: [0.2, 1]
 },
 {
  value: "文字颜色默认都是白色",
  color: "black",
  range: [0.2, 0.9]
 },
 {
  value: "若文字颜色不想白色",
  color: "black",
  range: [0.2, 1]
 },
 {
  value: "需要自己调整下JS",
  color: "black",
  range: [0.6, 0.7]
 },
 {
  value: "如果需要的是真实和视频交互的弹幕",
  color: "black",
  range: [0.2, 1]
 },
 {
  value: "可以回到原文",
  color: "black",
  range: [0, 0.9]
 },
 {
  value: "查看另外一个demo",
  color: "black",
  range: [0.7, 1]
 },
 {
  value: "下面就是占位弹幕了",
  color: "black",
  range: [0.7, 0.95]
 },
 {
  value: "前方高能预警!!!",
  color: "orange",
  range: [0.5, 0.8]
 },
 {
  value: "前方高能预警!!!",
  color: "orange",
  range: [0.5, 0.9]
 },
 {
  value: "前方高能预警!!!",
  color: "orange",
  range: [0, 1]
 },
 {
  value: "前方高能预警!!!",
  color: "orange",
  range: [0, 1]
 }
 ]; 
// 弹幕方法
 var canvasBarrage = function (canvas, data) {
 if (!canvas || !data || !data.length) {
  return;
 }
 if (typeof canvas == "string") {
  canvas = document.querySelector(canvas);
  canvasBarrage(canvas, data);
  return;
 }
 var context = canvas.getContext("2d");
 // canvas.width = '';
 // canvas.height = '';

 // 存储实例
 var store = {};

 // 字号大小
 var fontSize = 12;

 // 实例方法
 var Barrage = function (obj, index) {
  // 随机x坐标也就是横坐标,对于y纵坐标,以及变化量moveX
  this.x = (1 + (index * 0.1) / Math.random()) * canvas.width;
  this.y =
  obj.range[0] * canvas.height +
  (obj.range[1] - obj.range[0]) * canvas.height * Math.random() +
  36;
  if (this.y < fontSize) {
  this.y = fontSize;
  } else if (this.y > canvas.height - fontSize) {
  this.y = canvas.height - fontSize;
  }
  this.moveX = 1 + Math.random() * 3;

  this.opacity = 0.8 + 0.2 * Math.random();
  this.params = obj;

  this.draw = function () {
  var params = this.params;
  // 根据此时x位置绘制文本
  context.strokeStyle = params.color;
  context.font =
   "bold " + fontSize + 'px "microsoft yahei", sans-serif';
  context.fillStyle = "rgba(255,255,255," + this.opacity + ")";
  context.fillText(params.value, this.x, this.y);
  context.strokeText(params.value, this.x, this.y);
  };
 };

 data.forEach(function (obj, index) {
  store[index] = new Barrage(obj, index);
 });

 // 绘制弹幕文本
 var draw = function () {
  for (var index in store) {
  var barrage = store[index];
  // 位置变化
  barrage.x -= barrage.moveX;
  if (barrage.x < -1 * canvas.width * 1.5) {
   // 移动到画布外部时候从左侧开始继续位移
   barrage.x = (1 + (index * 0.1) / Math.random()) * canvas.width;
   barrage.y =
   (barrage.params.range[0] +
    (barrage.params.range[1] - barrage.params.range[0]) *
    Math.random()) *
   canvas.height;
   if (barrage.y < fontSize) {
   barrage.y = fontSize;
   } else if (barrage.y > canvas.height - fontSize) {
   barrage.y = canvas.height - fontSize;
   }
   barrage.moveX = 1 + Math.random() * 3;
  }
  // 根据新位置绘制圆圈圈
  store[index].draw();
  }
 };

 // 画布渲染
 var render = function () {
  // 清除画布
  context.clearRect(0, 0, canvas.width, canvas.height);

  // 绘制画布上所有的圆圈圈
  draw();

  // 继续渲染
  requestAnimationFrame(render);
 };

 render();
 };
 
 var canvas = '<canvas id="canvasBarrage" class="canvas-barrage"></canvas>'
 $('.video-x').html(canvas);
 canvasBarrage("#canvasBarrage", dataBarrage);
 }) 
</script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Extjs 继承Ext.data.Store不起作用原因分析及解决
Apr 15 Javascript
js 高效去除数组重复元素示例代码
Dec 19 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
May 05 Javascript
Javascript中replace()小结
Sep 30 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
Feb 13 Javascript
带你了解session和cookie作用原理区别和用法
Aug 14 Javascript
vue webpack打包优化操作技巧
Feb 22 Javascript
angular6的响应式表单的实现
Oct 10 Javascript
微信小程序可滑动周日历组件使用详解
Oct 21 Javascript
JS面向对象编程——ES6 中class的继承用法详解
Mar 03 Javascript
ant-design表单处理和常用方法及自定义验证操作
Oct 27 Javascript
vue封装数字翻牌器
Apr 20 Vue.js
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
May 21 #Javascript
JavaScript实现HSL拾色器
May 21 #Javascript
js实现拾色器插件(ColorPicker)
May 21 #Javascript
原生js实现日期选择插件
May 21 #Javascript
vue+Element中table表格实现可编辑(select下拉框)
May 21 #Javascript
浅谈React中组件逻辑复用的那些事儿
May 21 #Javascript
记一次用ts+vuecli4重构项目的实现
May 21 #Javascript
You might like
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
thinkphp3.x中变量的获取和过滤方法详解
2016/05/20 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
JS 页面计时器示例代码
2013/10/28 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
30个经典的jQuery代码开发技巧
2014/12/15 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
JavaScript实现搜索框的自动完成功能(一)
2016/02/25 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
2016/06/16 Javascript
js HTML5 Canvas绘制转盘抽奖
2020/09/13 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
2019/04/10 Javascript
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
解决python 无法加载downsample模型的问题
2018/10/25 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
Django Celery异步任务队列的实现
2019/07/24 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
基于Python实现大文件分割和命名脚本过程解析
2019/09/29 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
中科方德软件测试面试题
2016/04/21 面试题
共产党员公开承诺书
2014/03/25 职场文书
募捐感谢信
2015/01/22 职场文书
运动会致辞稿
2015/07/29 职场文书
总经理致辞
2015/07/29 职场文书
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis