在Canvas上的图形/图像绑定事件监听的实现方法

这篇文章主要介绍在Canvas上的图形/图像绑定事件监听的实现方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

HTML中只能为元素/标签绑定监听函数;

在Canvas上的图形/图像绑定事件监听的实现方法

Canvas绘图中只有一个元素-canvas,每一个图形/图像都不是元素,不能直接进行事件绑定。

解决办法:“事件委托”——让canvas监听所有的事件,计算事件发生坐标点,是否处于某个图形/图像的范围内。

对于标准几何图形可以进行事件绑定;

对于不标准几何图形进行事件绑定非常麻烦。

<!DOCTYPEhtml>
<html>
<headlang="en">
<metacharset="UTF-8">
<title>canvas绘制音乐播放器</title>
<style>
#range1,#range2{
height:3px;
position:relative;
border:0;
outline:0;
box-shadow:03px#300inset;
}
#range1{
width:250px;
left:-275px;
top:-10px;
}
#range2{
transform:rotate(-90deg);
width:50px;
left:-320px;
top:-50px;
}
</style>
</head>
<body>
<canvasid="can1"width="300px"height="500px"></canvas>
<audiosrc="voice/珍惜_孙露.mp3"id="audio"></audio>
<inputtype="range"min="0"max="1000"value="0"id="range1"/>
<inputtype="range"min="0"max="10"step="1"value="3"id="range2"/>
</body>

<script>
varctx1=can1.getContext('2d');
varimg=newImage();
varimg1=newImage();
varimg2=newImage();
img.src="img/bg.jpg";//绘图背景//必须放在img1,img2前赋值,否则会盖住
img1.src="img/loop.jpg";
img2.src="img/play1.png";
varprogress=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();
}
//开始画图
functionstar(){
ctx1.drawImage(img,0,0,300,500);//绘背景图
loop();//绘制循环图img1
ctx1.drawImage(img2,100,350,100,100);//绘图2
}

//循环事件,点击事件的全局变量
vari=0;
vartime=null;
varispause=true;
//循环函数
functionloop(){
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){
varx=e.offsetX;
vary=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>

以上是“在Canvas上的图形/图像绑定事件监听的实现方法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2021-03-21 22:36:21
收藏
分享
海报
0 条评论
176
上一篇:如何实现Ratchet模态框 下一篇:AmazeUI中模态框的实现方法
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码