一个不错的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-pack和box-align让div里面的元素垂直居中
Sep 01 HTML / CSS
支持IE8的纯css3开发的响应式设计动画菜单教程
Nov 05 HTML / CSS
纯CSS3实现8组超炫酷鼠标滑过图片动画
Mar 16 HTML / CSS
使用CSS3实现SVG路径描边动画效果入门教程
Oct 21 HTML / CSS
html5+css3实现一款注册表单实例
Apr 17 HTML / CSS
深入解析HTML5 Canvas控制图形矩阵变换的方法
Mar 24 HTML / CSS
详解前端HTML5几种存储方式的总结
Dec 27 HTML / CSS
手机端用rem+scss做适配的详解
Nov 15 HTML / CSS
html5移动端价格输入键盘的实现
Sep 16 HTML / CSS
Html5页面播放M4a音频文件
Mar 30 HTML / CSS
小程序实现悬浮按钮的全过程记录
Oct 16 HTML / CSS
css样式important规则的正确使用方式
Jun 10 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
中国第一家无线电行
2021/03/01 无线电
PHP 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
php dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
php实现的简单美国商品税计算函数
2015/07/13 PHP
PHP的APC模块实现上传进度条
2015/10/27 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
2013/01/09 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
jquery中one()方法的用法实例
2015/01/16 Javascript
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
js控制文本框输入的字符类型方法汇总
2015/06/19 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
2016/01/21 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
angularjs 页面自适应高度的方法
2018/01/17 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
使用flow来规范javascript的变量类型
2019/09/12 Javascript
layer提示框添加多个按钮选择的实例
2019/09/12 Javascript
[04:54]DOTA2 2017国际邀请赛:上届冠军WINGS采访短片
2017/08/09 DOTA
Python自动发邮件脚本
2017/03/31 Python
10个Python小技巧你值得拥有
2018/09/29 Python
对python调用RPC接口的实例详解
2019/01/03 Python
基于python检查SSL证书到期情况代码实例
2020/04/04 Python
python math模块的基本使用教程
2021/01/16 Python
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
美术毕业生求职信
2014/02/25 职场文书
建筑工程专业大学生求职信
2014/04/23 职场文书
小学生安全演讲稿
2014/04/25 职场文书
老人再婚离婚协议书范本
2014/10/27 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
Win11 Beta 22621.601 和 22622.601今日发布 KB5017384修复内容汇总
2022/09/23 数码科技