当前位置: 首页 > news >正文

分享一个自己写的基于canvas的原生js图片爆炸插件

图片描述

DEMO访问地址: https://bupt-hjm.github.io/BoomGo/
博客地址: http://bupt-hjm.github.io/2016/07/10/boom/
插件及使用方法地址: https://github.com/BUPT-HJM/BoomGo
动画:

图片描述

1.参考JQuery,支持链式调用

(function(window, undefined) {
  //...
  // A.prototype.init.prototype指向A.prototype
  boom.prototype.init.prototype = boom.prototype;
  //暴露变量
  window.boom = boom;
})(window)

2.Canvas API getImageData 对图像颜色采样

  /**
   * 获取canvas像素值,构造colors数组
   * @param   ctx    绘图上下文
   * @param   canvas canvas元素
   * @return  colors colors数组
   */
  function initColors(ctx, canvas) {
    var colors = [];
    var imagedata = ctx.getImageData(0, 0, canvas.width, canvas.height);
    var data = imagedata.data;
    for (var x = 0; x < canvas.width; x++) {
      for (var y = 0; y < canvas.height; y++) {
        //获取进入数组的偏移量
        var i = ((y * canvas.width) + x) * 4;

        var r = data[i];
        var g = data[i + 1];
        var b = data[i + 2];
        var a = data[i + 3];
        var color = {
          r: r,
          g: g,
          b: b,
          a: a
        }
        colors.push(color);
      }
    }
    return colors;
  }

3.支持自定义爆炸参数

//默认参数
var argOptions = {
    'radius': 10,//小球大小
    'minVx': -30,//最小水平喷射速度
    'maxVx': 30,//最大水平喷射速度
    'minVy': -50,//最小垂直喷射速度
    'maxVy': 50,//最大垂直喷射速度
    'edgeOpacity': false//canvas是否边缘羽化
}
//爆炸go支持延时默认为立即爆炸即go(0)
//使用自定义参数,可以不写全
var argOptions = {
    'radius': 10,//小球大小
    'minVx': -30,//最小水平喷射速度
    'maxVx': 30,//最大水平喷射速度
    'minVy': -50,//最小垂直喷射速度
    'maxVy': 50,//最大垂直喷射速度
    'edgeOpacity': false//是否canvas边缘羽化
}
boom("canvas1","imgs/test1.jpg",argOptions).go(3000);
//3s后按argOptions参数爆炸id为canvas1的图片

更多东西由你发现

初学canvas,欢迎follow和star,pull request,提出您的宝贵意见
github地址: https://github.com/BUPT-HJM/BoomGo

感谢

  • 感谢@chokcoco与@xxycode带来的灵感和部分代码参考

  • 感谢@kiki9611的建议

  • 参考

    • https://github.com/chokcoco/boomJS

    • https://github.com/xxycode/UIViewXXYBoom


可自由转载、引用,但需署名作者且注明文章出处。

相关文章:

  • C# mouse keyboard monitor
  • Snapshot Volume 操作 - 每天5分钟玩转 OpenStack(58)
  • SolrNet高级用法(分页、Facet查询、任意分组)
  • JAVA_OPTS设置
  • [android] 天气app布局练习
  • MFC知识点(DDX_Control 与 DDX_Text ,ON_COMMAND和ON_MESSAGE)
  • JavaScript操作JSON的方法总结,JSON字符串转换为JSON对象
  • Navicat for SQL Server 安装的步骤是这样的
  • PAT1005
  • 联想IPMI固件SMASH-CLP 管理
  • Android网络编程1
  • SQL Anywhere(ASA) 数据库“File is shorter than expected -- transaction rolled back”错误修复...
  • 简单快速打造你自己的PHP MVC框架
  • php系统常量
  • 将xml文件转为c#对像
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • CAP 一致性协议及应用解析
  • CSS实用技巧干货
  • E-HPC支持多队列管理和自动伸缩
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • HTML-表单
  • javascript 哈希表
  • JavaScript服务器推送技术之 WebSocket
  • java第三方包学习之lombok
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • JWT究竟是什么呢?
  • MaxCompute访问TableStore(OTS) 数据
  • Mysql数据库的条件查询语句
  • php的插入排序,通过双层for循环
  • REST架构的思考
  • uva 10370 Above Average
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 程序员该如何有效的找工作?
  • 记一次删除Git记录中的大文件的过程
  • 开源地图数据可视化库——mapnik
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 两列自适应布局方案整理
  • 如何进阶一名有竞争力的程序员?
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • # Java NIO(一)FileChannel
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (SpringBoot)第二章:Spring创建和使用
  • (zhuan) 一些RL的文献(及笔记)
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (论文阅读30/100)Convolutional Pose Machines
  • (转)Android学习笔记 --- android任务栈和启动模式
  • .gitignore
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .Net Web项目创建比较不错的参考文章