Canvas画布,用画布创建一个可以写字画画的一个框架

效果如下

1.创建画布,给画布一个id
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <canvas id="mycanvas" width="800" height="500" style="border: 1px solid pink;"></canvas>
</body>

</script>

</html>

创建完画布后,其他基本都是用JavaScript写

2.创建画笔,在script里面写
 let cav=document.querySelector("#mycanvas");//获取画布
 let cxt=cav.getContext("2d");
3.获取鼠标移动的坐标

其中,鼠标按下时确定鼠标的位置,当鼠标开始移动后再记录鼠标的位置,用mousedown和mousemove事件完成。clientX和clientY获取鼠标的坐标。

 cav.onmousedown=function(){
    let x1=event.clientX;
    let y1=event.clientY;
    cas.moveTo(x1,y1);
    cav.onmousemove=function(){
      let x2=event.clientX;
      let y2=event.clientY;
      cas.lineTo(x2,y2);
      cas.stroke();
    }
  }

当我运行后发现虽然可以在画布里面写,但是鼠标释放后却停不下来,那么就需要用到mouseup事件让画笔在鼠标释放后停止划线。

  cav.onmouseup=function(){
  cav.onmousemove=null;
  }

现在鼠标已经可以在画布中随意写字画画了,可是发现线条是从鼠标中间的位置延展画出来的,所以需要将坐标减去偏移量offsetLeft和offsetTop。

 cav.onmousedown=function(){
    let x1=event.clientX-cav.offsetLeft;
    let y1=event.clientY-cav.offsetTop;
    cas.moveTo(x1,y1);
    cav.onmousemove=function(){
      let x2=event.clientX-cav.offsetLeft;
      let y2=event.clientY-cav.offsetTop;
      cas.lineTo(x2,y2);
      cas.stroke();
    }
  }
4.清除整个画布以及其他功能

在画布后面放一个button按钮,点击按钮后,可以清空整个画布,用clearRect实现。除了清除按钮以外,还有选择颜色,选择线条粗细。

完整代码如下
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <canvas id="mycanvas" width="800" height="500" style="border: 1px solid pink;"></canvas>
    <button id="clear">清除图像</button>
    <button id="btn1">--请选择线条粗细--
    <input type="range" value="1" id="rang" style="display: none;"></input></button>
    <input type="color" id="color"><!--改变颜色-->
</body>
<script>
    //获取id
    let cav=document.querySelector("#mycanvas");
    let clear=document.querySelector("#clear");
    let rang=document.querySelector("#rang");
    let color=document.querySelector("#color");
    let btn1=document.querySelector("#btn1");
    let cas=cav.getContext("2d");
    cav.onmousedown=function(){
        cas.beginPath();//为了让每次清空画布后,不受前面的影响
        let x1=event.clientX-cav.offsetLeft;
        let y1=event.clientY-cav.offsetTop;
        cas.moveTo(x1,y1);
        cav.onmousemove=function(){
            let x2=event.clientX-cav.offsetLeft;
            let y2=event.clientY-cav.offsetTop;
            cas.lineTo(x2,y2);
            cas.stroke();
            cas.lineWidth=fontwidth;//将改变后的线条大小赋值给lineWidth线条宽度
            cas.strokeStyle=col;
            
        }
    }
    cav.onmouseup=function(){
        cav.onmousemove=null;
    }
    clear.onclick=function(){
        cas.clearRect(0,0,800,500);//清空画布
    }
    btn1.onclick=function(){
        rang.style.display="block";
    }
    let fontwidth=1//设置线条初始值为1
    rang.onchange=function(){
        fontwidth = parseInt(rang.value / 10);     
            if (fontwidth < 1) {                      
                fontwidth = 1
            }
    }
    let col=null;
    color.onchange=function(){
        col=color.value;//改变颜色
    }
</script>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值