900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > canvas drawbitmap不出现_JS实现简单的画板(canvas) 可在PC和移动端实现。

canvas drawbitmap不出现_JS实现简单的画板(canvas) 可在PC和移动端实现。

时间:2024-01-25 19:16:06

相关推荐

canvas drawbitmap不出现_JS实现简单的画板(canvas) 可在PC和移动端实现。

废话后面说,先上HTML代码

<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>画板</title><link rel="stylesheet" href="style.css" /></head><body><canvas id="canvas"></canvas><script src="main.js"></script></body></html>

这是一个只有一个canvas标签的HTML代码其中有几点需要注意:

1.注意将lang(第二行的)值为zh-CN

2.注意加上第二个meta标签,这个在写移动端的时候起作用

3.link标签引用css代码

4.js的代码要在HTML之后引用,在前面的话获取元素会报错

上css代码

* {margin: 0px;padding: 0px;box-sizing: border-box;}#canvas {display: block;}

注意:

先清除默认样式,然后把盒模型定义为border-boxcanvas的默认display为inline,这里改为blockcanvas 当没有设置宽度和高度的时候,canvas会初始化宽度为300像素和高度为150像素。该元素可以使用CSS来定义大小,但在绘制时图像会伸缩以适应它的框架尺寸:如果CSS的尺寸与初始画布的比例不一致,它会出现扭曲。我写宽高是通过js实现的,直接把宽高改为浏览器的窗口的大小

上JS代码

var canvas = document.getElementById("canvas");//将canvas的宽高设置为浏览器可视的宽高canvas.width = document.documentElement.clientWidth;canvas.height = document.documentElement.clientHeight;var ctx = canvas.getContext("2d");//填充的颜色ctx.fillStyle = "black";//边框ctx.strokeStyle = "none";//用来标记的变量,当鼠标按下时为true,松开时为falsevar flag = false;//记录鼠标之前的位置的数组var position = [0, 0];//线的宽度ctx.lineWidth = 5;//连接的方式ctx.lineCap = "round";//通过判断ontouchstart来判断时移动端还是PC端,当时在移动端的时候监听一些时间,当在PC端的时候监听一些事件if ("ontouchstart" in document.documentElement) {//监听手指按下的事件canvas.ontouchstart = function (e) {//记录手按下时的位置position[0] = e.touches[0].clientX;position[1] = e.touches[0].clientY;};canvas.ontouchmove = function (e) {//调用draw函数来画,函数最后面有写draw(position[0], position[1], e.touches[0].clientX, e.touches[0].clientY);position[0] = e.touches[0].clientX;position[1] = e.touches[0].clientY;};} else {//如果不是移动端的话,监听这些属性canvas.onmousedown = function (e) {//当鼠标按下的时候flag为true,然后记录位置flag = true;position[0] = e.clientX;position[1] = e.clientY;};canvas.onmousemove = function (e) {if (flag) {//画线,然后记录位置draw(position[0], position[1], e.clientX, e.clientY);position[0] = e.clientX;position[1] = e.clientY;}};canvas.onmouseup = function () {//鼠标松开后flag为falseflag = false;};}//画线的函数function draw(starX, starY, endX, endY) {ctx.beginPath();ctx.moveTo(starX, starY);ctx.lineTo(endX, endY);ctx.closePath();ctx.stroke();}

以上便是我写的代码,我已将代码上传GitHub,链接:

/1446450047/My-Code-Exercise/tree/master/Drawing-board​

我的效果:可以直接画噢,也可以在移动端实现,但是在移动端的话有的浏览器从上往下划的时候的刷新,所以还是有一些bug的

画板​1446450047.github.io

如果大家想系统化的再学习canvas的用法可以参考MDN文档:

Canvas的基本用法​

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。