一个不错的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的transform造成z-index无效解决方案
Dec 04 HTML / CSS
如何用border-image实现文字气泡边框的示例代码
Jan 21 HTML / CSS
解决CSS3 transition-delay 属性默认值0不带单位失效的问题
Oct 29 HTML / CSS
HTML5仿手机微信聊天界面
Mar 18 HTML / CSS
HTML5的文档结构和新增标签完全解析
Apr 21 HTML / CSS
webapp字号大小跟随系统字号大小缩放的示例代码
Dec 26 HTML / CSS
HTML5 和小程序实现拍照图片旋转、压缩和上传功能
Oct 08 HTML / CSS
HTML5 Web Database 数据库的SQL语句的使用方法
Dec 09 HTML / CSS
基于IE10/HTML5 开发
Apr 22 HTML / CSS
HTML5 embed标签定义和用法详解
May 09 HTML / CSS
HTML5 Canvas中绘制矩形实例
Jan 01 HTML / CSS
HTML5图片层叠的实现示例
Jul 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
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
Javascript添加监听与删除监听用法详解
2014/12/19 Javascript
JavaScript实现列出数组中最长的连续数
2014/12/29 Javascript
jQuery表单域选择器用法分析
2015/02/10 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&amp;”)
2016/12/23 Javascript
Bootstrap table 定制提示语的加载过程
2017/02/20 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
JS中call和apply函数用法实例分析
2018/06/20 Javascript
vue实现的上拉加载更多数据/分页功能示例
2019/05/25 Javascript
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
Python二分查找详解
2015/09/13 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
在Python中表示一个对象的方法
2019/06/25 Python
python对常见数据类型的遍历解析
2019/08/27 Python
Tensorflow中的dropout的使用方法
2020/03/13 Python
python如何爬取网页中的文字
2020/07/28 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
美国学校用品、教室和教学商店:Discount School Supply
2018/04/04 全球购物
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
实习护理工作自我评价
2013/09/25 职场文书
仓库管理制度
2014/01/21 职场文书
大学生社会实践自我鉴定
2014/03/24 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
私用公车造成事故检讨书
2014/11/16 职场文书
黄石寨导游词
2015/02/05 职场文书
高中英语教学反思范文
2016/03/02 职场文书
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS