利用HTML5的canvas进行鼠标写字

简介:

主要是使用HTML5中的canvas标签进行的,对画布的基本操作可以参考以下链接内容中的HTML5画布canvas
https://blog.csdn.net/qq_44174803/article/details/121067133

HTML代码:

<!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>canvas绘制案例</title>
    <style>
        #myCanvas {
            /* width: 400;
            height: 300; */
            border: 2px solid red;
        }

        /* #myDiv {
            width: 400px;
            height: 300px;
            margin: 100px auto;
            line-height: 300px;
        } */
    </style>
</head>

<body>
    <!-- <div id="myDiv">
    </div> -->
    <canvas id="myCanvas" width="400" height="300">
        <!-- 定义好需要绘制的幕布 -->
    </canvas>
</body>


<script type="text/javascript" src="mycanvas.js">
    // 此处可以直接内嵌写入html代码中,也可以通过外部链接的方式将JS代码引入
</script>

</html>

JS控制代码:

var canvas=document.getElementById("myCanvas");        //通过dom操作获取当千需要绘制的幕布
var pen=canvas.getContext('2d');       //设置绘制的上下文环境为2D类型

//准备画笔部分
// pen.fillStyle="#FF0000";        //将画笔设置为红色
pen.lineWidth=1;
pen.strokeStyle="black";   //将画笔设置为红色

//设置鼠标和画布的连接(通过函数实现)
canvas.οnmοusedοwn=start;       //鼠标左键按下代表开始绘制
canvas.οnmοusemοve=draw;        //鼠标移动正在绘制(前提是按下左键)
canvas.οnmοuseup=end;           //鼠标左键松开代表绘制完成

var mousePress=null;        //设置变量储存鼠标状态 用于判断
var lastPos=null;           //代表上一次绘制的终点


//实现绘制函数部分:
//此外需要一个获取鼠标坐标的函数  方便进行绘图
function getPos(event){     //event是事件响应的参数(包括鼠标点击事件和键盘敲击事件等等)
    //尝试把参数event换成e或者其他变量试试
    var tx,ty;
    tx=event.clientX;
    ty=event.clientY;
    return {
        x:tx,
        y:ty
    }
}
function start(event){       //定义开始函数
    mousePress=true;           //一按下就修改变量状态
    // pen.moveTo(800,300);
    //     pen.lineTo(800,350);
    //     pen.stroke();
}

function draw(event){        //  定义绘制函数
    if(!mousePress) return;     //如果没有按下鼠标  直接退出当前函数
    var now=getPos(event);      //获取当前鼠标位置
    //实际上一绘制结束点 是此次绘制的起点,而当前的鼠标位置是绘制的终点
    if(lastPos!=null){
        pen.beginPath();
        pen.moveTo(lastPos.x,lastPos.y);
        pen.lineTo(now.x,now.y);
        pen.stroke();      //该函数是完成绘制的最后一个步骤
    }
    //如果lastPos为空 则不进行绘制
    lastPos=now;    //绘制完成 当前鼠标点变成上一绘制结束点
}
function end(event){
    mousePress=false;
    lastPos=null;       //鼠标弹起后一定要将lastPos设置为空 要不然每次结束都会记忆上一次结束的点 
}

实现效果:

在这里插入图片描述

需要注意的点:

画布中的尺寸最好不要加上px,直接在canvas标签内使用数字定义尺寸即可,也不需要在对应的CSS样式中去定义它的尺寸。

待改进的点:

由于目前对dom操作并不熟练,后续可考虑通过JS的dom操作将画布添加到div区域中,而div区域进行margin属性的设置便可以将画布置于屏幕中央。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值