html怎么给没张图片添加单击事件,如何在Canvas上的图形/图像绑定事件监听的实现...

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

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

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

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

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

canvas绘制音乐播放器

#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;

}

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.οnlοad=function(){//背景图片加载完成,判断是否所有图片加载完成,是-->开始画图

progress+=20;

(progress==60)&&star();

}

img1.οnlοad=function(){//背景图片加载完成,判断是否所有图片加载完成,是-->开始画图

progress+=20;

(progress==60)&&star();

}

img2.οnlοad=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.οnclick=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.οnchange=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.οnchange=function(){

audio.volume=range2.value/10;

}

到此这篇关于如何在Canvas上的图形/图像绑定事件监听的实现的文章就介绍到这了,更多相关Canvas图像绑定事件监听内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值