一个不错的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不透明度实例讲解
Apr 26 HTML / CSS
使用CSS3美化HTML表单的技巧演示
May 17 HTML / CSS
css3实现圆锥渐变conic-gradient效果
Feb 12 HTML / CSS
利用CSS3的3D效果制作正方体
Mar 10 HTML / CSS
html5 input元素新特性_动力节点Java学院整理
Jul 06 HTML / CSS
HTML5 Canvas 起步(2) - 路径
May 12 HTML / CSS
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
Apr 08 HTML / CSS
利用HTML5 Canvas制作一个简单的打飞机游戏
May 11 HTML / CSS
举例详解HTML5中使用JSON格式提交表单
Jun 16 HTML / CSS
快速创建 HTML5 Canvas 电信网络拓扑图的示例代码
Mar 21 HTML / CSS
CSS 一行代码实现头像与国旗的融合
Oct 24 HTML / CSS
CSS精灵图的原理与使用方法介绍
Mar 17 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中global和$GLOBALS[]的分析之一
2012/02/02 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
php实现等比例压缩图片
2018/07/26 PHP
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
JavaScript实现对下拉列表值进行排序的方法
2015/07/15 Javascript
JavaScript学习笔记之创建对象
2016/03/25 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
AngularJS使用ng-repeat指令实现下拉框
2016/08/23 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
2018/02/04 Javascript
taro开发微信小程序的实践
2019/05/21 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
Python 时间操作例子和时间格式化参数小结
2014/04/24 Python
Python中为什么要用self探讨
2015/04/14 Python
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
Python日志器使用方法及原理解析
2020/09/27 Python
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
Jacques Lemans德国:奥地利钟表品牌
2019/12/26 全球购物
非常详细的C#面试题集
2016/07/13 面试题
小学生美德少年事迹
2014/02/02 职场文书
个性发展自我评价
2014/02/11 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
质量整改通知单
2015/04/21 职场文书
2015年党员公开承诺事项
2015/04/27 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书