如何给Canvas的图像进行事件监听绑定,方法是什么
Admin 2022-07-04 群英技术资讯 1418 次浏览
这篇文章将为大家详细讲解有关“如何给Canvas的图像进行事件监听绑定,方法是什么”的知识,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。HTML中只能为元素/标签绑定监听函数;
Canvas绘图中只有一个元素-canvas,每一个图形/图像都不是元素,不能直接进行事件绑定。
解决办法:“事件委托”——让canvas监听所有的事件,计算事件发生坐标点,是否处于某个图形/图像的范围内。
对于标准几何图形可以进行事件绑定;
对于不标准几何图形进行事件绑定非常麻烦。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>canvas绘制音乐播放器</title>
<style>
#range1,#range2{
height:3px;
position: relative;
border: 0;
outline: 0;
box-shadow: 0 3px #300 inset;
}
#range1{
width:250px;
left:-275px;
top:-10px;
}
#range2{
transform:rotate(-90deg);
width:50px;
left:-320px;
top:-50px;
}
</style>
</head>
<body>
<canvas id="can1" width="300px" height="500px"></canvas>
<audio src="voice/珍惜_孙露.mp3" id="audio"></audio>
<input type="range" min="0" max="1000" value="0" id="range1"/>
<input type="range" min="0" max="10" step="1" value="3" id="range2"/>
</body>
<script>
var ctx1=can1.getContext('2d');
var img=new Image();
var img1=new Image();
var img2=new Image();
img.src="img/bg.jpg";//绘图背景//必须放在img1,img2前赋值,否则会盖住
img1.src="img/loop.jpg";
img2.src="img/play1.png";
var progress=0;//设置权重,判断所有图片是否加载完成
img.onload=function(){//背景图片加载完成,判断是否所有图片加载完成,是-->开始画图
progress+=20;
(progress==60)&&star();
}
img1.onload=function(){//背景图片加载完成,判断是否所有图片加载完成,是-->开始画图
progress+=20;
(progress==60)&&star();
}
img2.onload=function(){//背景图片加载完成,判断是否所有图片加载完成,是-->开始画图
progress+=20;
(progress==60)&&star();
}
//开始画图
function star(){
ctx1.drawImage(img,0,0,300,500);//绘背景图
loop();//绘制循环图 img1
ctx1.drawImage(img2,100,350,100,100);//绘图2
}
//循环事件,点击事件的全局变量
var i=0;
var time=null;
var ispause=true;
//循环函数
function loop(){
ctx1.save();//保存画笔当前状态
ctx1.translate(150,165);//平移
ctx1.rotate(i*Math.PI/180);//旋转
ctx1.drawImage(img1,-65,-65);//绘图
ctx1.restore();//复位画笔之前的状态
//绘画两个圆
ctx1.strokeStyle="#000";
ctx1.lineWidth=20;
ctx1.arc(150,165,85,0,2*Math.PI);
ctx1.stroke();
ctx1.beginPath();
ctx1.strokeStyle="#303";
ctx1.lineWidth=10;
ctx1.arc(150,165,75,0,2*Math.PI);
ctx1.stroke();
i+=10;
(i>=360)&&(i=0);
}
//点击事件
can1.onclick=function(e){
var x= e.offsetX;
var y= e.offsetY;
//console.log(x,y);
if((x-150)*(x-150)+(y-400)*(y-400)<=50*50*Math.PI){
//console.log("我是圆");
if(ispause){
audio.play();
ispause=false;
img2.src="img/pause1.png";
time=setInterval(loop,100);
}else{
audio.pause();
//clearInterval(time);
//ispause=true;
//img2.src="img/play.png";
}
}
//定时器,监听音乐是否播放完成,主要为了音乐播放完成停止
setInterval(function(){
if(audio.paused){
ispause=true;
clearInterval(time);
img2.src="img/play1.png";
}
},5);
}
//进度条改变事件--进度
range1.onchange=function(){//当前进度=音乐总时长*range当前值/range最大value值
audio.currentTime=parseFloat(range1.value*audio.duration/range1.max);
}
//监听音乐当前播放进度,时间低进度条改变事件失效(来不及改变)
setInterval("range1.value=parseFloat(range1.max*audio.currentTime/audio.duration);",400);
//进度条改变事件--音量
audio.volume=0.3;
range2.onchange=function(){
audio.volume=range2.value/10;
}
</script>
</html>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章给大家分享的是HTML实现合并表格边框的内容,因为给table和td标签加边框时,默认使用双边框,那么怎样次啊能实现合并表格边框呢?文中会使用HTML+CSS来实现这个效果,感兴趣的朋友接下来一起跟随小编看看吧。
在css3中可以实现平移效果的属性是“transform”。transform属性配合translate()函数使用可以对元素进行平移操作,语法为“元素{transform:translate(横向平移值,竖向平移值);}”。
HTML5中basecss的有关操作html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,ins,kbd,q,s,samp,sma
这篇文章给大家分享的是CSS3如何实现div右侧滑入效果。小编觉得挺实用的,对大家学习和理解CSS3滑动动画效果的实现有帮助,因此分享给大家做个参考,文中的示例代码介绍得很详细,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。
用CSS实现骰子效果的方法和代码是什么?有不少朋友对此感兴趣,下面小编给大家整理和分享了相关知识和资料,易于大家学习和理解,有需要的朋友可以借鉴参考,下面我们一起来了解一下吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008