canvas画板(鼠标和触摸)

<!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>

 


 

热门相关:超武穿梭   薄先生,情不由己   豪门闪婚:帝少的神秘冷妻   明月照大江   天启预报