好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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

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

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

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

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

<!DOCTY PE  html>
<html>
<head lang="en">
    < ;m eta charset="UTF-8">
    <t IT le>canvas 绘制 音乐播放器</title>
    <style>
         # range1,#range2{
            h ei ght:3px;
            position: relative;
            border: 0;
            outline: 0;
            box -s hadow: 0 3px #300 inset;
        }
        #range1{
            width:250px;
            left:-275px;
            top:-10px;
        }
        #range2{
            transform:rotate(-90 deg );
            width:50px;
            left:-320px;
            top:-50px;
        }
    </style>
</head>
<body>
    <canvas id="ca n1 " width="300px" height="500px"></canvas>
    <audio src="voice/珍惜_孙露.m P3 " 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/ play 1.png";
    var  PR ogress=0;//设置权重,判断所有图片是否加载完成
    img.onload=function(){//背景图片加载完成,判断是否所有图片加载完成,是--> 开始 画图
        progress+=20;
        (progress == 60) && star();
    }
    img1.onload=function(){//背景图片加载完成,判断是否所有图片加载完成,是-->开始画图
                progress+=20;
        (progress==60)& am  p; &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.re Store ();//复位画笔之前的状态
        //绘画两个 圆 
        ctx1. stroke Style="#000";
        ctx1.lineWidth=20;
        ctx1.arc(150,165,85,0,2*Math.PI);
        ctx1.stroke();
        ctx1.be gin Path();
        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. current Time=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上的图形/图像 绑定事件 监听的实现的 文章 就介绍到这了,更多相关Canvas图像绑定事件监听内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!

总结

以上是 为你收集整理的 如何在Canvas上的图形/图像绑定事件监听的实现 全部内容,希望文章能够帮你解决 如何在Canvas上的图形/图像绑定事件监听的实现 所遇到的问题。

如果觉得 网站内容还不错, 推荐好友。

查看更多关于如何在Canvas上的图形/图像绑定事件监听的实现的详细内容...

  阅读:16次