一个不错的HTML5 Canvas多层点击事件监听实例


Posted in HTML / CSS onApril 29, 2014

最近写一个HTML5的游戏框架。今天写到一个多层点击事件的监听。觉得还是挺好玩的。于是把它从模块中抽化出来了。以下代码只是一些思想。具体实现肯定不是那么丑陋

复制代码
代码如下:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.box > canvas {
position: absolute;
}
</style>
</head>
<body>
<div class="box">
<canvas id="layer1" width="200" height="200"></canvas>
<canvas id="layer2" width="500" height="500"></canvas>
</div>
<script type="text/javascript">
function getRect(obj) {
var x1 = obj.offsetLeft;
var y1 = obj.offsetTop;
var x2 = x1+obj.offsetWidth;
var y2 = y1+obj.offsetHeight;
return {
x1: x1,
y1: y1,
x2: x2,
y2: y2
};
}
function inside(x, y, rect) {
if(x>rect.x1 && x<rect.x2 && y>rect.y1 && y<rect.y2) {
return true;
}
else {
return false;
}
}
var trigger = {};
trigger.list = [];
trigger.listen = function() {
var list = trigger.list;
document.addEventListener('click',function(evt) {
for(var i=0; i<list.length; ++i) {
list[i](evt);
}
});
};
trigger.listen();
var l1 = document.getElementById('layer1');
var l2 = document.getElementById('layer2');
var dl1 = function(evt) {
if(inside(evt.clientX, evt.clientY, getRect(l1))) {
console.log('click');
}
}
trigger.list.push(dl1);
var dl2 = function(evt) {
if(inside(evt.clientX, evt.clientY, getRect(l2))) {
console.log('click2');
}
}
trigger.list.push(dl2);
</script>
</body>
</html>
HTML / CSS 相关文章推荐
基于CSS3 animation动画属性实现轮播图效果
Sep 12 HTML / CSS
css3新单位vw、vh的使用教程
Mar 23 HTML / CSS
html5使用canvas实现图片下载功能的示例代码
Aug 26 HTML / CSS
HTML5实现表单自动验证功能实例代码
Jan 11 HTML / CSS
W3C公布最新的HTML5标准草案
Oct 17 HTML / CSS
HTML5 canvas 基本语法
Aug 26 HTML / CSS
在html5的Canvas上绘制椭圆的几种方法总结
Jan 07 HTML / CSS
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
Jan 09 HTML / CSS
html5菜单折纸效果
Apr 22 HTML / CSS
Html5页面二次分享的实现
Jul 30 HTML / CSS
css中:last-child不生效的解决方法
Aug 05 HTML / CSS
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
May 07 HTML / CSS
HTML5中5个简单实用的API
Apr 28 #HTML / CSS
会走动的图形html5时钟示例
Apr 27 #HTML / CSS
html5定位并在百度地图上显示的示例
Apr 27 #HTML / CSS
HTML5中的autofocus(自动聚焦)属性介绍
Apr 23 #HTML / CSS
HTML5的download属性详细介绍和使用实例
Apr 23 #HTML / CSS
HTML5里的placeholder属性使用实例和美化显示效果的方法
Apr 23 #HTML / CSS
HTML5的hidden属性兼容老浏览器的方法
Apr 23 #HTML / CSS
You might like
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
2015/06/17 PHP
深入探究PHP的多进程编程方法
2015/08/18 PHP
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
动态加载外部javascript文件的函数代码分享
2011/07/28 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
jquery获取radio值实例
2014/10/16 Javascript
js style动态设置table高度
2014/10/21 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
小程序实现分类页
2019/07/12 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
2019/11/09 Javascript
[06:43]DAC2018 4.5 SOLO赛 Maybe vs Paparazi
2018/04/06 DOTA
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python3实现从文件中读取指定行的方法
2015/05/22 Python
Python模块文件结构代码详解
2018/02/03 Python
pandas中去除指定字符的实例
2018/05/18 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
Python中xml和json格式相互转换操作示例
2018/12/05 Python
用Python写一个模拟qq聊天小程序的代码实例
2019/03/06 Python
旧时光糖果:Old Time Candy
2018/02/05 全球购物
美国购买当代和现代家具网站:MODTEMPO
2018/07/20 全球购物
本科生学习总结的自我评价
2013/10/02 职场文书
留学自荐信
2013/10/10 职场文书
毕业生求职推荐信
2013/11/04 职场文书
就业自荐书
2013/12/05 职场文书
党员思想汇报范文
2013/12/30 职场文书
晚会邀请函范文
2014/01/24 职场文书
项目投资意向书
2014/04/01 职场文书
领导班子专题民主生活会情况想汇报
2014/09/30 职场文书
python获取淘宝服务器时间的代码示例
2021/04/22 Python
Python爬取某拍短视频
2021/06/11 Python
python面向对象版学生信息管理系统
2021/06/24 Python