一个不错的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 24 HTML / CSS
一款纯css3实现的动画加载导航
Oct 08 HTML / CSS
一款纯css3实现的竖形二级导航的实例教程
Dec 11 HTML / CSS
使用CSS3制作一个简单的Chrome模拟器
Jul 15 HTML / CSS
CSS3 box-sizing属性详解
Nov 15 HTML / CSS
CSS3实现瀑布流布局与无限加载图片相册的实例代码
Dec 22 HTML / CSS
HTML5 video播放器全屏(fullScreen)方法实例
Apr 24 HTML / CSS
用HTML5的canvas实现一个炫酷时钟效果
May 20 HTML / CSS
html5利用canvas实现颜色容差抠图功能
Dec 23 HTML / CSS
canvas实现手机的手势解锁的步骤详细
Mar 16 HTML / CSS
巧用 -webkit-box-reflect 倒影实现各类动效(小结)
Apr 22 HTML / CSS
HTML5之高度塌陷问题的解决
Jun 01 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操作mysqli(示例代码)
2013/10/28 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
php实现头像上传预览功能
2017/04/27 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
2019/05/21 PHP
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
详解jquery uploadify 上传文件
2013/11/09 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
2013/11/11 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
2015/02/13 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
2017/12/09 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
微信小程序仿抖音短视频切换效果的实例代码
2020/06/24 Javascript
VUE中V-IF条件判断改变元素的样式操作
2020/08/09 Javascript
Python正则表达式经典入门教程
2017/05/22 Python
python实现linux下抓包并存库功能
2018/07/18 Python
python3使用pandas获取股票数据的方法
2018/12/22 Python
Python函数参数分类原理详解
2020/05/28 Python
光电信息专业应届生求职信
2013/10/07 职场文书
优秀员工评语
2014/02/10 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
北京导游词
2015/02/12 职场文书
教师节慰问信
2015/02/15 职场文书
银行求职信模板
2015/03/20 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
浅析Django接口版本控制
2021/06/26 Python