一个不错的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制作炫酷的自定义发光文字
Mar 28 HTML / CSS
CSS3动画:5种预载动画效果实例
Apr 05 HTML / CSS
html5新增的定时器requestAnimationFrame实现进度条功能
Dec 13 HTML / CSS
HTML5文档结构标签
Apr 21 HTML / CSS
html5中JavaScript removeChild 删除所有节点
May 16 HTML / CSS
用HTML5 实现橡皮擦的涂抹效果的教程
May 11 HTML / CSS
浅析移动设备HTML5页面布局
Dec 01 HTML / CSS
处理HTML5新标签的浏览器兼容版问题
Mar 13 HTML / CSS
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
Jan 18 HTML / CSS
CSS实现多个元素在盒子内两端对齐效果
Mar 30 HTML / CSS
css3中transform属性实现的4种功能
Aug 07 HTML / CSS
css3 文字断裂效果
Apr 22 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往windows中添加用户
2006/12/06 PHP
一些使用频率比较高的php函数
2008/10/03 PHP
zend framework多模块多布局配置
2011/02/26 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
解析php中static,const与define的使用区别
2013/06/18 PHP
PHP+memcache实现消息队列案例分享
2014/05/21 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
js 数组操作代码集锦
2009/04/28 Javascript
Javascript 圆角div的实现代码
2009/10/15 Javascript
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
js中匿名函数的N种写法
2010/09/08 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
JavaScript实现列出数组中最长的连续数
2014/12/29 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
JavaScript实现移动端轮播效果
2017/06/06 Javascript
js 事件的传播机制(实例讲解)
2017/07/20 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
不到40行代码用Python实现一个简单的推荐系统
2019/05/10 Python
python实现日志按天分割
2019/07/22 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
2020/04/13 Python
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
美国购买当代和现代家具网站:MODTEMPO
2018/07/20 全球购物
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
五星级酒店宣传口号
2015/12/25 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
Go gorilla/sessions库安装使用
2022/08/14 Golang