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 相关文章推荐
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
Nov 30 Javascript
JAVASCRIPT IE 与 FF中兼容问题小结
Feb 18 Javascript
25个优雅的jQuery Tooltip插件推荐
May 25 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
Apr 11 Javascript
jQuery选择器中含有空格的使用示例及注意事项
Aug 25 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
Nov 21 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
Jun 23 Javascript
vue组件实现进度条效果
Jun 06 Javascript
React组件重构之嵌套+继承及高阶组件详解
Jul 19 Javascript
vue axios 简单封装以及思考
Oct 09 Javascript
vue中tab选项卡的实现思路
Nov 25 Javascript
vue实现select下拉显示隐藏功能
Sep 30 Javascript
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获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
js获取class的所有元素
2013/03/28 Javascript
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
jquery选择器需要注意的问题
2014/11/26 Javascript
jquery实现页面关键词高亮显示的方法
2015/03/12 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
Vue通过input筛选数据
2020/10/26 Javascript
简单谈谈axios中的get,post方法
2017/06/25 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
JavaScript实现全选取消效果
2017/12/14 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
浅谈PDF.js使用心得
2018/06/07 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
[33:23]VG vs Pain 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python文件处理
2016/02/29 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
Python拼接字符串的7种方法总结
2018/11/01 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
基于python+selenium的二次封装的实现
2020/01/06 Python
Python logging模块写入中文出现乱码
2020/05/21 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
俄罗斯香水和化妆品购物网站:Л’Этуаль
2018/05/10 全球购物
电气专业应届生求职信
2013/11/01 职场文书
大学生标准推荐信范文
2013/11/25 职场文书
秘书专业自荐信范文
2013/12/26 职场文书
法学专业求职信
2014/07/15 职场文书
运动会加油稿
2015/07/22 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
一小时迅速入门Mybatis之bind与多数据源支持 Java API
2021/09/15 Javascript