JS canvas标签动态绘制图型

使用canvas标签动态绘制图型,当点击鼠标时,以鼠标点击的坐标作为图形中心点。当点击数为偶数时画三角形,当点击数为奇数时画五角星

<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title></title>
    <style type="text/css"></style>
    <script type="text/javascript">
        var g=0;
        function getStyles(obj) {
            return document.defaultView.getComputedStyle(obj);
        } 
        function getCanvasPos(canvas,e)  {  //获取鼠标在canvas上的坐标  
            var rect = canvas.getBoundingClientRect(); 
            var leftB = parseInt(getStyles(canvas).borderLeftWidth);//获取的是样式,需要转换为数值
            var topB = parseInt(getStyles(canvas).borderTopWidth);
            return {   
                 x: (e.clientX - rect.left) - leftB,  
                 y: (e.clientY - rect.top) - topB 
               };  
        }  
        function drawStar(context, r, R, x, y) {   // 画五角星
            context.beginPath();
            for(var i=0;i<5;i++){
                context.lineTo(Math.cos((18+i*75)/180*Math.PI)*R+x,-Math.sin((18+i*75)/180*Math.PI)*R+y);
                context.lineTo(Math.cos((54+i*75)/180*Math.PI)*r+x,-Math.sin((54+i*75)/180*Math.PI)*r+y);
            }
            context.closePath();
            context.stroke();
            context.fill();
        }
        function drawsan(context,r,x,y){  // 画三角形
            context.beginPath();
            context.moveTo(x,y-r);
            context.lineTo(Math.cos( 320/180*Math.PI )*r+x,Math.sin(40/180*Math.PI )*r+y);
            context.lineTo(Math.cos( 210/180*Math.PI )*r+x,Math.sin(40/180*Math.PI )*r+y);
            context.closePath();
            context.stroke();
            context.fill();
        }
           function draw(e) {
            g++;
            var mycanvas=document.getElementById('mycanvas');
            var context=mycanvas.getContext('2d');
            context.clearRect(0,0,mycanvas.width,mycanvas.height);  
            context.strokeStyle="powderblue";
            context.fillStyle="powderblue";
            if(g%2==0){ 
                drawsan(context, 30, getCanvasPos(mycanvas,e).x, getCanvasPos(mycanvas,e).y);
            }
            else{
                drawStar(context,25,50,getCanvasPos(mycanvas,e).x,getCanvasPos(mycanvas,e).y);
            }
        }
    </script>
</head>
<body>
    <div onmousedown="draw(event)">
        <canvas width="600px" height="400px" style="border: 1px solid black;" id="mycanvas"></canvas>
    </div>
</body>
</html>

 

posted on 2018-12-02 20:54  huas_psw  阅读(586)  评论(0编辑  收藏  举报