校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 如何在Canvas上的圖形/圖像綁定事件監聽的實現

如何在Canvas上的圖形/圖像綁定事件監聽的實現

熱門標簽:只辦理400電話 機器人外呼系統存在哪些能力 電話機器人電銷系統掙話費 拓展地圖標注 南昌仁和怎么申請開通400電話 電話機器人黑斑馬免費 平涼地圖標注位置怎么弄 高德地圖標注地點糾錯 如何獲取地圖標注客戶

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>

到此這篇關于如何在Canvas上的圖形/圖像綁定事件監聽的實現的文章就介紹到這了,更多相關Canvas圖像綁定事件監聽內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章,希望大家以后多多支持腳本之家!

標簽:青島 新疆 遼源 西藏 漯河 棗莊 永州 池州

巨人網絡通訊聲明:本文標題《如何在Canvas上的圖形/圖像綁定事件監聽的實現》,本文關鍵詞  如,何在,Canvas,上,的,圖形,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《如何在Canvas上的圖形/圖像綁定事件監聽的實現》相關的同類信息!
  • 本頁收集關于如何在Canvas上的圖形/圖像綁定事件監聽的實現的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 鸡泽县| 乡城县| 晋江市| 江西省| 东乡县| 高平市| 特克斯县| 砀山县| 江油市| 酉阳| 彭阳县| 盐山县| 揭东县| 巴青县| 彭山县| 南陵县| 武威市| 土默特右旗| 开阳县| 宁津县| 榕江县| 班玛县| 孟津县| 广宁县| 龙岩市| 湖口县| 峡江县| 乾安县| 台北市| 苍南县| 韶关市| 凤台县| 小金县| 台前县| 东兴市| 永顺县| 乌拉特中旗| 保山市| 吴堡县| 江都市| 巴彦淖尔市|