一个不错的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 box-shadow阴影(外阴影与外发光)图示讲解
Aug 11 HTML / CSS
纯CSS3制作的简洁蓝白风格的登录模板(非IE效果更好)
Aug 11 HTML / CSS
CSS3 二级导航菜单的制作的示例
Apr 02 HTML / CSS
html5构建触屏网站之touch事件介绍
Jan 07 HTML / CSS
html5贪吃蛇游戏使用63行代码完美实现
Jun 25 HTML / CSS
通过Canvas及File API缩放并上传图片完整示例
Aug 08 HTML / CSS
HTML5 Convas APIs方法详解
Apr 24 HTML / CSS
关于HTML5语义标签的实践(blog页面)
Jul 12 HTML / CSS
HTML5自定义mp3播放器源码
Jan 06 HTML / CSS
CSS 文字装饰 text-decoration & text-emphasis 详解
Apr 06 HTML / CSS
CSS3实现的3D隧道效果
Apr 27 HTML / CSS
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
May 25 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
Php部分常见问题总结
2006/10/09 PHP
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
datePicker——日期选择控件(with jquery)
2007/02/20 Javascript
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
jQuery模拟黑客帝国矩阵效果实例
2015/06/28 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
2015/07/20 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
2015/11/26 Javascript
JavaScript的Number对象的toString()方法
2015/12/18 Javascript
JavaScript实现获取某个元素相邻兄弟节点的prev与next方法
2016/01/25 Javascript
谈一谈js中的执行环境及作用域
2016/03/30 Javascript
javascript之IE版本检测超简单方法
2016/08/20 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
浅谈vuex actions和mutation的异曲同工
2018/12/13 Javascript
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
2019/04/30 Javascript
vue实现修改图片后实时更新
2019/11/14 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
JS实现手风琴特效
2020/11/08 Javascript
[01:51]DAC趣味视频-如何成为职业选手.mp4
2017/04/02 DOTA
Python使用代理抓取网站图片(多线程)
2014/03/14 Python
对numpy中轴与维度的理解
2018/04/18 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
对python pandas读取剪贴板内容的方法详解
2019/01/24 Python
Python OpenCV实现视频分帧
2019/06/01 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
python os.listdir()乱码解决方案
2021/01/31 Python
Python3压缩和解压缩实现代码
2021/03/01 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
出纳工作岗位责任制
2014/02/02 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
家长对学校的意见和建议
2015/06/03 职场文书
一文搞懂redux在react中的初步用法
2021/06/09 Javascript