如何使用canvas来制作好用的涂鸦画板

这次给大家带来如何使用canvas来制作好用的涂鸦画板,使用canvas来制作好用的涂鸦画板的注意事项有哪些,下面就是实战案例,一起来看一下。在canvas中获取光标坐标

获取坐标的代码很简单:

nbsp;html>                       *{margin: 0;padding: 0}                        var canvas = document.getElementById('board');        var context = canvas.getContext('2d');        var current = {            color: 'black',// 0) {                var touch = e.touches[0];                return { x: touch.pageX, y: touch.pageY };            }            return { x: e.clientX, y: e.clientY };        }        //鼠标移动        function onMouseMove(e) {            var p = getPoint(e);            document.getElementById("point").innerHTML=p.x+"-"+p.y;        }        canvas.width = 600;        canvas.height = 300;         canvas.addEventListener('mousemove', onMouseMove, false); //<==兼容PC        canvas.addEventListener('touchmove', onMouseMove, false);//<===兼容安卓或其他系统    

登录后复制

注意:因为鼠标与触摸屏的事件是不一样的,鼠标只要悬浮与canvas上就可以获取到了,而触摸屏是需要按下的,并且所返回的 Event 对象也是不一样的。

2.控制是否绘制

控制是否绘制其实很简单,就是在不同事件时判断自定义变量drawing的值来控制

nbsp;html>                        *{margin: 0;padding: 0}                        var canvas = document.getElementById('board');        var context = canvas.getContext('2d');        var current = {            color: 'black',//<===画笔颜色配置            width: 1//线条宽度         };        var drawing = false;// 0) {                var touch = e.touches[0];                return { x: touch.pageX, y: touch.pageY };            }            return { x: e.clientX, y: e.clientY };        }         //鼠标按下         function onMouseDown(e) {                drawing = true;             }            //鼠标弹起            function onMouseUp(e) {                if (!drawing) { return; }                drawing = false;             }        //鼠标移动        function onMouseMove(e) {            if (!drawing) { return; }            var p = getPoint(e);            document.getElementById("point").innerHTML=p.x+"-"+p.y;        }        canvas.width = 600;        canvas.height = 300;         canvas.addEventListener('mousedown', onMouseDown, false);        canvas.addEventListener('mouseup', onMouseUp, false);        canvas.addEventListener('mouseout', onMouseUp, false);        canvas.addEventListener('mousemove', onMouseMove, false);        canvas.addEventListener('touchstart', onMouseDown, false);        canvas.addEventListener('touchend', onMouseUp, false);        canvas.addEventListener('touchmove', onMouseMove, false);    

登录后复制

3.线条绘制

线条绘制的代码也是很简单的

....//线条绘制function drawLine(x0, y0, x1, y1, color, width) {    context.beginPath();    context.moveTo(x0, y0);    context.lineTo(x1, y1);    context.strokeStyle = color;    context.lineWidth = width;     context.stroke();    context.closePath();}....

登录后复制

将绘制线条代码整合到事件中:

nbsp;html>                Document                    var canvas = document.getElementById('board');        var context = canvas.getContext('2d');        var current = {            color: 'black',//<===画笔颜色配置            width: 1//线条宽度         };        var drawing = false;// 0) {                var touch = e.touches[0];                return { x: touch.pageX, y: touch.pageY };            }            return { x: e.clientX, y: e.clientY };        }        //线条绘制        function drawLine(x0, y0, x1, y1, color, width) {            context.beginPath();            context.moveTo(x0, y0);            context.lineTo(x1, y1);            context.strokeStyle = color;            context.lineWidth = width;             context.stroke();            context.closePath();        }        //鼠标按下        function onMouseDown(e) {            drawing = true;            //记录按下点            var p = getPoint(e);            current.x = p.x;            current.y = p.y;        }        //鼠标弹起        function onMouseUp(e) {            if (!drawing) { return; }            drawing = false;            //绘制结束点            var p = getPoint(e);            drawLine(current.x, current.y, p.x, p.y, current.color, current.width);        }        //鼠标移动        function onMouseMove(e) {            if (!drawing) { return; }            var p = getPoint(e);            document.getElementById("point").innerHTML = p.x + "-" + p.y;            //移动绘制            drawLine(current.x, current.y, p.x, p.y, current.color, current.width);            current.x = p.x;            current.y = p.y;        }        canvas.width = 600;        canvas.height = 300;        canvas.addEventListener('mousedown', onMouseDown, false);        canvas.addEventListener('mouseup', onMouseUp, false);        canvas.addEventListener('mouseout', onMouseUp, false);        canvas.addEventListener('mousemove', onMouseMove, false);        canvas.addEventListener('touchstart', onMouseDown, false);        canvas.addEventListener('touchend', onMouseUp, false);        canvas.addEventListener('touchmove', onMouseMove, false);    

登录后复制

4.绘制线条优化

当绘制线条宽度比较小的时候还好,一旦比较粗就会有写问题:

这时只要稍微改一下绘制的代码就行了

....//线条绘制function drawLine(x0, y0, x1, y1, color, width) {    context.beginPath();    context.moveTo(x0, y0);    context.lineTo(x1, y1);    context.strokeStyle = color;    context.lineWidth = width;     //-----加入-----    context.lineCap = "round";    context.lineJoin = "round";    //-----加入-----    context.stroke();    context.closePath();}....

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

相关阅读:

如何使用s-xlsx之合并单元格

js-xlsx读取xlsx文件的异步详解

如何使用s-xlsx实现Excel 文件导入和导出(下)

以上就是如何使用canvas来制作好用的涂鸦画板的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2783805.html

(0)
上一篇 2025年3月8日 16:55:05
下一篇 2025年2月26日 18:20:57

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • H5的Canvas如何实现绘制音乐环形频谱图

    这次给大家带来h5的canvas如何实现绘制音乐环形频谱图,h5canvas实现绘制音乐环形频谱图的注意事项有哪些,下面就是实战案例,一起来看一下。 在B站我们有很多的小伙伴们应该都看到过用AE做的可视化音乐播放器播放音乐的视频,看着特别酷…

    2025年3月8日
    200
  • canvas怎样做出黑色背景的红色烟花

    这次给大家带来canvas怎样做出黑色背景的红色烟花,canvas做出黑色背景的红色烟花的注意事项有哪些,下面就是实战案例,一起来看一下。 html 登录后复制 css body {    background: #000;    marg…

    2025年3月8日
    200
  • canvas怎样做出黑色背景的青色烟花

    这次给大家带来canvas怎样做出黑色背景的青色烟花,canvas做出黑色背景的青色烟花的注意事项有哪些,下面就是实战案例,一起来看一下。 html 2018 登录后复制 css html,body {    padding: 0px;  …

    2025年3月8日
    200
  • js实现将canvas生成图片保存或直接保存一张图片

    本文主要和大家分享js实现将canvas生成图片保存或直接保存一张图片,希望能帮助到大家。 将canvas数组保存 function downLoadImage(canvas,name) {    var a = document.crea…

    编程技术 2025年3月8日
    200
  • js与canvas合成图片做出微信公众号海报功能

    这次给大家带来js与canvas合成图片做出微信公众号海报功能,js与canvas合成图片做出微信公众号海报功能的注意事项有哪些,下面就是实战案例,一起来看一下。 在微信公众号开发中,很多时候都有个需求是一张图加上头像和昵称或者其他数据生成…

    2025年3月8日 编程技术
    200
  • JS里特别好用的轻量级日期插件

    这次给大家带来JS里特别好用的轻量级日期插件,使用JS里特别好用轻量级日期插件的注意事项有哪些,下面就是实战案例,一起来看一下。 jquery的日期插件有好几款,H5中的input也可以自带日期选择。但为什么要再写一个,有两个理由,一个是引…

    2025年3月8日
    200
  • vue中slot-scope使用的图文详解

    这次给大家带来vue中slot-scope使用的图文详解,使用slot-scope的注意事项有哪些,下面就是实战案例,一起来看一下。 写在前面 vue中关于插槽的文档说明很短,语言又写的很凝练,再加上其和methods,data,compu…

    2025年3月8日
    200
  • js中数组常用的方法

    本文主要和大家分享js中数组常用的方法,希望能帮助到大家。 arrage.sort()直接使用默认是是升序 请注意 这只能说明sort只能认识开头的第一个unicode字符还是不可以进行升序操作 真正的升序,必须必须使用sort的另一种形式…

    2025年3月8日
    200
  • js和canvas实现滑动拼图验证码功能

    本文主要和大家分享js和canvas实现滑动拼图验证码功能,现在经常会遇到滑动拼图验证,希望能帮助到大家。   上图为网易云盾的滑动拼图验证码,其应该有一个专门的图片库,裁剪的位置是固定的。我的想法是,随机生成图片,随机生成位置,再用can…

    2025年3月8日 编程技术
    200
  • js和canvas实现图片预览压缩上传

    本文主要大家分享js和canvas实现图片预览压缩上传的方法,结合实例代码和大家讲解,希望能帮助到大家。 第一步:用户选择需要上传的图片 登录后复制 在选定了图片后 upload 函数将被触发,我们需要在这个函数中,获取到图片的资源,将它压…

    2025年3月8日
    200

发表回复

登录后才能评论