首页 > 其他分享 >canvas画板(鼠标和触摸)

canvas画板(鼠标和触摸)

时间:2023-02-15 08:44:05浏览次数:41  
标签:canvas const 鼠标 画板 ctx var false event

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>canves</title>
    <style>
        #canvas  {
            cursor:url(../images/pen.png),crosshair;
        }
        #canvasdiv{
            border: 1px solid #bcbcbc;
        }
    </style>
</head>
<body>
<div id="canvasdiv">
    <canvas id="canvas"></canvas>
</div>
<button type="button" class="layui-btn layui-btn-normal" id="clear" style="display: none" onclick="clear_all()" onsubmit="return false;"></button>
</body>
<script type="text/javascript">
    var canvas = document.getElementById("canvas");
    var ctx = canvas.getContext("2d");
    var base64data='';
    canvas.width="320"
    canvas.height="240"

    //页面不出现滚动滑动
    $("html,body").css("overflow","hidden").css("height","100%");
    document.body.addEventListener('touchmove', self.welcomeShowedListener, false);

    //画一个黑色矩形
    ctx.fillStyle = "rgba(225,225,225,0)";//绘制填充颜色 透明色
    ctx.fillRect(0, 0,320,240);//绘制一个被填充的矩形

    //按下标记
    var onoff = false;
    //定义起始位置
    var oldx = 0;
    var oldy = 0;
    //设置画笔颜色默认为黑色
    var linecolor = "black";
    //画笔宽度默认为4
    var linw = 4;

    //判断是触摸还是鼠标
    if (document.body.ontouchstart !== undefined) {
        //执行touch代码
        // 手指按下
        canvas.ontouchstart = e => {
            painting = true
            const event = e.touches[0]
            ctx.lineCap = 'round'
            ctx.lineJoin = 'round'
            const x = event.pageX
            const y = event.pageY
            ctx.beginPath()
            ctx.moveTo(x, y)
            ctx.lineWidth = linw
            ctx.strokeStyle = linecolor
        }
        // 手指移动
        canvas.ontouchmove = e => {
            if (!painting) {
                return
            }
            const event = e.touches[0]
            const x = event.pageX
            const y = event.pageY
            ctx.lineTo(x, y)
            ctx.stroke()
        }
        // 手指抬起
        canvas.ontouchend = () => {
            if (!painting) {
                return false
            }
            painting = false
            ctx.closePath()
        }
        // 手指离开区域
        ontouchcancel = () => {
            if (!painting) {
                return false
            }
            painting = false
            ctx.closePath()
        }
    } else {
        //鼠标移动事件,事件绑定
        // 执行mouse代码
        canvas.addEventListener("mousemove", draw);
        canvas.addEventListener("mousedown", down);
        canvas.addEventListener("mouseup", up);
    }


    // 下笔时按下标记打开,给oldx、oldy赋值
    function down(event) {
        onoff = true;
        oldx = event.pageX;
        oldy = event.pageY;
    }

    //检测鼠标离开后,按下标记关闭
    function up() {
        onoff = false;
    }

    //画图,按下标记打开
    function draw(event) {
        if (onoff == true) {
            var newx = event.pageX ;
            var newy = event.pageY;
            // 起始一条路径,或重置当前路径。
            ctx.beginPath();
            // 把路径移动到画布中的指定点,不创建线条。
            ctx.moveTo(oldx, oldy);
            // 添加一个新点,然后在画布中创建从该点到最后指定点的线条。
            ctx.lineTo(newx, newy);
            // 设置或返回用于笔触的颜色、渐变或模式。
            ctx.strokeStyle = linecolor;
            // 设置或返回当前的线条宽度。
            ctx.lineWidth = linw;
            // 设置或返回线条的结束端点样式。
            ctx.lineCap = "round";
            // 绘制已定义的路径。
            ctx.stroke();
            oldx = newx;
            oldy = newy;
        }
    }

    // 生成图片
    function generate_picture() {
            const dataImg = new Image();
            // canvas生成图片
            dataImg.src = canvas.toDataURL('image/png');
    };

    //清理画布
    function clear_all() {
            ctx.fillStyle = 'rgba(225,225,225,0)';
            ctx.fillRect(0, 0, 320,240);
    };

    // 下载图片
    function download_picture() {
        const dataImg = new Image();
        dataImg.src = canvas.toDataURL('image/png');
        document.querySelector('#image').appendChild(dataImg)
        const alink = document.createElement("a");
        alink.href = dataImg.src;
        alink.download = "testImg.jpg";
        alink.click();
    }
</script>
</html>

 


 

标签:canvas,const,鼠标,画板,ctx,var,false,event
From: https://www.cnblogs.com/lhjy1/p/17121473.html

相关文章

  • 脱离鼠标
    操作系统是windows10,可能下面说的一些快捷键在windows其它版本操作系统会不起作用。嗯,其实只要掌握常用的几个就基本上可以脱离鼠标了。同时可以留意一些键盘上的功能键,那......
  • canvas性能优化——离屏渲染
    一、正常动画实践为了使用户达到更好的体验,做动画的时候都知道用requestAnimationFrame了,但是他也是有极限的,当绘制的东西足够多或者复杂的时候,频繁的删除与重绘降低了很......
  • Openlayers 通过canvas渲染部分地图
    效果图实现原理简单描述Openlayers图层的渲染大多数都是通过canvas实现,在图层渲染前后事件中通过canvas控制渲染区域即可实现。代码点击查看代码componentDidMoun......
  • Android 中Canvas的save(),saveLayer()和restore()解析
    1、save()方法:用来保存Canvas的状态,save()方法之后的代码,可以调用Canvas的平移、放缩、旋转、裁剪等操作!2、restore()方法:用来恢复Canvas之前保存的状态(可以想成是......
  • python canvas画布的介绍
    1、在画布上绘制对象,通常用create_xxxx,xxxx=对象类型。2、每次调用create_xxx,都会返回创建组件的ID,也可以用tag属性指定标签。3、通过调用canvas.move实现一次性动作。实例#......
  • HTML5 canvas画一个折线图
    <body><canvasid="drawing"style="border:1pxsolid;"width="600"height="400"></canvas><scripttype="text/javascript">letdrawing=document.query......
  • HTML5 canvas基础使用
    <body> <!-- 1,canvas的宽和高要在标签中写,写在style中将会使画布拉伸到指定宽和高,不是真正的宽高。 --> <canvasid='drawing'width="300"height="700"......
  • 去掉Element 中el-input type=number时尾部上下箭头、禁用鼠标滚动
    在Element中,如果我们的输入框中需要输入数字时,将el-input的类型设置为number,这时输入框的尾部会出现上下箭头,影响美观性,这时只需在页面中加入如下样式,就可以去掉输入框尾部......
  • python自动化办公--pyautogui控制鼠标和键盘操作
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。 ......
  • 用canvas怎么制作下雪效果
    首先新建一个html文件,将body的背景设置为天空的那种深蓝色,并创建一个canvas,canvas的操作逻辑都放在snow.js中:<!DOCTYPEhtml><head><style>body{backgro......