在Canvas上的图形/图像绑定事件监听的实现方法
这篇文章主要介绍在Canvas上的图形/图像绑定事件监听的实现方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
HTML中只能为元素/标签绑定监听函数;
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上的图形/图像绑定事件监听的实现方法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
-
html5 canvas元素使用1
-
canvas如何截取圆角图片
canvas如何截取圆角图片小编给大家分享一下canvas如何截...
-
怎么用html5的canvas跳一跳小游戏效果
怎么用html5的canvas跳一跳小游戏效果这篇文章主要介绍了怎...
-
Canvas渐进填充与透明实现图像的Mask效果怎么实现
Canvas渐进填充与透明实现图像的Mask效果怎么实现这篇文章主...
-
微信小程序canvas图片及文本适配的方法
微信小程序canvas图片及文本适配的方法这篇文章主要介绍了微信小...
-
怎么用HTML5组件Canvas实现图像灰度化
怎么用HTML5组件Canvas实现图像灰度化今天小编给大家分享一...
-
如何用html5的canvas画布绘制贝塞尔曲线
如何用html5的canvas画布绘制贝塞尔曲线这篇“如何用htm...
-
微信小程序canvas中translate怎么用
微信小程序canvas中translate怎么用本篇内容介绍了“微...
-
HTML5中怎么用Canvas实现变形
HTML5中怎么用Canvas实现变形本篇内容主要讲解“HTML5...
-
HTML5中怎么用Canvas绘制各种线条
HTML5中怎么用Canvas绘制各种线条本篇内容介绍了“HTML...