<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body style="margin-left:200px;">
<canvas id="display" height="600" width="600" style="background-color: bisque;"></canvas>
<script>
class Track {
constructor(){
this.content = []
}
getTrack(){
return this.content
}
clearTrack(){
this.content = []
}
pushItem(item){
this.content.push(item)
}
getNewestItem(){
return this.content.length!==0?this.content[this.content.length-1]:null
}
}
class Drawpaper {
constructor(){
this.el = document.createElement("canvas")
}
}
let cav = document.getElementById('display')
console.log(cav)
let context_2d = cav.getContext("2d");
let track = new Track
let defaultPenconf = {
size:9,
color:'black',
bgcolor:'black'
}
let canvasconf = {
height:600,
width:600,
bgcolor:'black'
}
setConfig (context_2d,defaultPenconf)
function setConfig (ctx,penconf) {
ctx.lineJoin="round";
ctx.lineCap="round";
ctx.strokeStyle=penconf.color;
ctx.fillStyle=penconf.bgcolor;
ctx.lineWidth=penconf.size;
}
function initListener (cav) {
cav.addEventListener('mousemove',penmove)
document.addEventListener('mouseup',penup)
cav.addEventListener('mouseleave',penleave)
}
function clearListener (cav) {
cav.removeEventListener('mousemove',penmove)
document.removeEventListener('mouseup',penup)
cav.removeEventListener('mouseleave',penleave)
}
function pendown (e) {
if(e.button!==0){
return
}
console.log(1)
let mousePosition = {x:e.offsetX,y:e.offsetY}
drawRound (context_2d,mousePosition)
track.pushItem(mousePosition)
initListener (cav)
}
function penmove(e) {
console.log(2)
let mousePosition = {x:e.offsetX,y:e.offsetY}
draw (context_2d,mousePosition)
track.pushItem (mousePosition)
}
function penup (e) {
console.log(3)
clearListener (cav)
track.clearTrack ()
}
cav.addEventListener('mousedown',pendown)
function penleave (e) {
let mousePosition = {x:e.offsetX,y:e.offsetY}
draw (context_2d,mousePosition)
clearListener (cav)
track.clearTrack ()
}
function drawRound (cavctx,position={}) {
let {x=0,y=0} = position
cavctx.beginPath();
let {size} = defaultPenconf
let r = size/2
cavctx.arc(x,y,r,0,2*Math.PI)
cavctx.closePath();
cavctx.fill();
}
function draw (cavctx,position={}) {//画布对象,位置,笔刷设置
let {x=0,y=0} = position
let prevPosition = track.getNewestItem()
cavctx.beginPath();
cavctx.moveTo(prevPosition.x,prevPosition.y)
cavctx.lineTo(x,y);
cavctx.closePath();
cavctx.stroke();
}
</script>
</body>
</html>
版权声明:本文为weixin_51364599原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。