一个不错的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中的注音对齐属性ruby-align用法指南
Jul 01 HTML / CSS
你应该知道的30个css选择器
Mar 19 HTML / CSS
CSS3实例分享--超炫checkbox复选框和radio单选框
Sep 01 HTML / CSS
CSS3颜色值RGBA与渐变色使用介绍
Mar 06 HTML / CSS
CSS3新增布局之: flex详解
Jun 18 HTML / CSS
HTML5 Geolocation API的正确使用方法
Dec 04 HTML / CSS
基于Html5实现的react拖拽排序组件示例
Aug 13 HTML / CSS
简单聊聊H5的pushState与replaceState的用法
Apr 03 HTML / CSS
html5版canvas自由拼图实例
Oct 15 HTML / CSS
HTML5 History API 实现无刷新跳转
Jan 11 HTML / CSS
深入了解canvas在移动端绘制模糊的问题解决
Apr 30 HTML / CSS
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
Mar 18 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读取mysql的简单实例
2014/01/15 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
2016/03/21 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
2017/08/30 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
React中的refs的使用教程
2018/02/13 Javascript
微信开发之企业付款到银行卡接口开发的示例代码
2018/09/18 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
[04:44]DOTA2 2017全国高校联赛视频回顾
2017/08/21 DOTA
详解python的数字类型变量与其方法
2016/11/20 Python
python机器学习理论与实战(四)逻辑回归
2018/01/19 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
python 3.7.0 下pillow安装方法
2018/08/27 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
FILA德国官方网站:来自意大利的体育和街头服饰品牌
2019/07/19 全球购物
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
部队万能检讨书
2014/02/20 职场文书
寄语是什么意思
2014/04/10 职场文书
会计电算化专业求职信
2014/06/10 职场文书
2014年度培训工作总结
2014/11/27 职场文书
《赵州桥》教学反思
2016/02/17 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书
Android存储中最基本的文件存储方式
2022/04/30 Java/Android
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫