网上看到一个游戏《数钱数到手抽筋》简单的模仿一下。
鼠标拖动或点按都可以“数钱”,效果图:
[img]http://dl2.iteye.com/upload/attachment/0104/5227/9b8473ee-a2de-340a-a6c9-6df5cbba0081.gif[/img]

点击可以试玩:[url]http://www.108js.com/article/canvas/money/index.html[/url]

欢迎访问博主网站:[url]http://www.108js.com[/url]

一、HTML文件

<html><head>   <style type="text/css">   html,body,canvas{    margin: 0px;    padding: 0px;    border:none;    text-align: center;    background-color: black;   }

  canvas {    background-color: green;  } </style></head> <body>   <canvas id="stage" width="540" height="700">   您的浏览器不支持html5, 请换用支持html5的浏览器</canvas> </body></html> <script type="text/javascript" src="resources.js"></script> <script type="text/javascript" src="app.js"></script>

二、app.js

var c = document.getElementById("stage");var ctx = c.getContext("2d");var dragging = false;var w1=0;var loc;var dy=0;var h1=0;var int;

//加载图片resources.load([    'img/splashtitle.png',    'img/starttip.png',    'img/mb0.png',    'img/m0.png']);

//添加回调函数,图像加载完毕后执行,启动游戏resources.onReady(init);

function init() {   w1=resources.get("img/mb0.png").width;   h1=resources.get("img/mb0.png").height;

   ctx.drawImage(resources.get("img/splashtitle.png"),0,0);   ctx.drawImage(resources.get("img/starttip.png"),c.width/2-30,c.height/2);   ctx.drawImage(resources.get("img/mb0.png"),c.width/2-w1/2,c.height/2+82);}

// 事件处理 c.onmousedown = function (e) { //鼠标按下   if(int){        clearInterval(int);        dy=0;    }    dragging = true;//程序处于拖动状态    e.preventDefault(); }

 c.onmousemove = function (e) { //鼠标移动   if (dragging) {      //窗口坐标转canvas坐标      loc = windowToCanvas(c, e.clientX, e.clientY);

      ctx.drawImage(resources.get("img/m0.png"),c.width/2-w1/2,loc.y);    }  }

 c.onmouseup = function (e) { //鼠标松开    dragging = false;    loc = windowToCanvas(c, e.clientX, e.clientY);

    if(int){        clearInterval(int);        dy=0;    }    int=setInterval(Animation,50);

 }

 function Animation(){     ctx.clearRect(0,0,c.width,c.height);     ctx.drawImage(resources.get("img/splashtitle.png"),0,0);     ctx.drawImage(resources.get("img/starttip.png"),c.width/2-30,c.height/2);     ctx.drawImage(resources.get("img/mb0.png"),c.width/2-w1/2,c.height/2+82);     ctx.drawImage(resources.get("img/m0.png"),c.width/2-w1/2,loc.y-dy);     dy+=100;

  }

//窗口坐标转canvas坐标............

function windowToCanvas(canvas, x, y) {   var canvasRectangle = canvas.getBoundingClientRect();

   return {             x: x - canvasRectangle.left,             y: y - canvasRectangle.top          };}

三、图像装载器resources.js

//图像装载器(function() {    var resourceCache = {};//缓存图片的数组    var loading = [];    var readyCallbacks = [];//保存所有回调函数的数组

    // 从一个url或一个数组装载图像    function load(urlOrArr) {        if(urlOrArr instanceof Array) {            urlOrArr.forEach(function(url) {//遍历数组中的每一个url,装载图像                _load(url);            });        }        else {            _load(urlOrArr);        }    }

    //从一个url装载图像    function _load(url) {        if(resourceCache[url]) {//缓存中有这个图片,直接返回它            return resourceCache[url];        }        else {            var img = new Image();            img.onload = function() {//图片加载完后                resourceCache[url] = img;//放入缓存                if(isReady()) {//全部图片加载后,执行全部回调函数                    readyCallbacks.forEach(function(func) { func(); });                }            };            resourceCache[url] = false;//标记这个图片还没加载            img.src = url;        }    }

    function get(url) {//从缓存中取图片        return resourceCache[url];    }

    function isReady() {//所有图片是否加载完毕        var ready = true;        for(var k in resourceCache) {//遍历缓存图片的数组            if(resourceCache.hasOwnProperty(k) &&               !resourceCache[k]) {//只要有一个图片没加载,返回false                ready = false;            }        }        return ready;//当全部图片加载到缓存中后,返回true,否则返回false;    }

    function onReady(func) {//添加回调函数        readyCallbacks.push(func);    }

    window.resources = { //定义一个对象        load: load,        get: get,        onReady: onReady,        isReady: isReady    };})();

四、源码下载。

《HTML5 Canvas学习笔记(10)》数钱数到手抽筋相关推荐

  1. HTML5中canvas实现拼图游戏,HTML5 Canvas学习笔记(6)拼图游戏(数字版)

    今天网上发现了一段代码,只有界面,很不错,学习了并完成了逻辑. 效果图: 点击这里试玩 http://www.108js.com/article/canvas/6/play.html 欢迎访问博主的网 ...

  2. 【学习笔记】使用魔数快速求平方根

    [学习笔记]使用魔数快速求平方根 简介 介绍使用魔数0x1fbd1df5快速求平方根x{\sqrt{x}}x​的C语言实现和公式的推导. 代码 float MagicSqrt(float x) {fl ...

  3. 算法【二叉树】学习笔记 - 已知结点数计算可构建出多少种二叉树

    算法[二叉树]学习笔记 - 已知结点数计算可构建出多少种二叉树 卡特兰数 相关知识点 排列组合公式 排列 Arrangement 组合 Combination 分步计算 简化 参考资料 题目:已知3个 ...

  4. 数钱数到手抽筋html5,数钱数到手抽筋的经典句子

    1.他两手抓住竹竿,像敏捷的猴子那样,双脚一蹬,就嘈嘈嘈地爬了上去. 2.父母会在历史博物馆里徜徉度过愉快的时光. 3.只要我的生命没有停止,对他的记忆就不会熄灭. 4.对于像数学物理这样的学科,我只 ...

  5. 【学习笔记】使用魔数快速求立方根

    [学习笔记]使用魔数快速求立方根 简介 介绍使用魔数0x2a517d47快速求立方根 x 3 {\sqrt[3]{x}} 3x ​的C语言实现和公式的推导. 代码 float MagicCubeRoo ...

  6. 数钱数到手抽筋html5,经典说说心情短语 数钱数到手抽筋

    爱情不在于相互含情脉脉地对视,而在于共同朝一个方向前看. 把心掏空,不再放进任何人 不管多大多老,不管家人朋友怎幺催,都不要随便对待婚姻,婚姻不是打牌,重新洗牌要付出巨大代价. 不要为了寂寞去恋爱,时 ...

  7. canvas学习笔记

    canvas学习笔记 canvas API中文网 - Canvas API中文文档首页地图 使用canvas来绘制图形 - Web API 接口参考 | MDN 什么是Canvas? Canvas是H ...

  8. 前端HTML5+CSS3学习笔记

    HTML5+CSS3学习笔记 ==CSS第一天== 一.css简介 二.css语法规范 三.css代码风格 四.css选择器的作用 五.css基础选择器 1.标签选择器: 2.类选择器 3.多类名选择 ...

  9. JavaWeb黑马旅游网-学习笔记10【项目代码】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

最新文章

  1. mysql 5.7快速部署
  2. hdu5094(上海邀请赛E) 状态压缩bfs:取钥匙开门到目的地
  3. 如何在Linux实现自动运行程序
  4. 深度学习论文翻译--Deep Residual Learning for Image Recognition
  5. (2006, ‘MySQL server has gone away‘) 原因和解决方案
  6. Ubuntu18.04环境下设置虚拟网卡
  7. Tomcat 映射虚拟目录
  8. MySQL中多表的连接
  9. 软考高项-项目知识管理体系
  10. 【2021考研数学汤家凤高数辅导讲义】第四章 不定积分
  11. 中华石杉-- --消息队列的笔记
  12. oj-杭电 熊猫阿波的故事
  13. 重磅 | 谱尼测试圆满承办化妆品生产企业研学班
  14. pocketSpinix 训练自己的声学模型(一)
  15. PPT模板 | 湖南农业大学汇报通用PPT模板
  16. debussy下载及安装
  17. keil uvision4 调试教程
  18. 解决微信小程序“app.json: [“workers“] 字段需为 目录“错误及worker的使用
  19. 大数据告诉你:2019年该学习什么技术
  20. java断路器触发条件_断路器,AOP实现断路器模式 ------------Hystrix

热门文章

  1. 万亿市值家电巨头“齐聚”汽车赛道,美的“寻求”兼并收购
  2. paddle基于bert的情绪识别
  3. 2016年1月19日课程作业
  4. Windows10+Ubuntu双系统安装[多图]
  5. Ubuntu双系统安装
  6. 东软实训心得:万事开头难
  7. 极光笔记 | 用 WhatsApp 进行海外用户运营的 N 个理由
  8. Linux常用的基本命令
  9. 帆软FCRP认证分享
  10. Bias/variance tradeoff