WD1X.COM - 问答一下,轻松解决,电脑应用解决专家
主板显卡CPU内存显示器
硬盘维修显卡维修显示器维修
注册表系统命令DOS命令Win8
存储光存储鼠标键盘
内存维修打印机维修
WinXPWin7Win11Linux
硬件综合机箱电源散热器手机数码
主板维修CPU维修键盘鼠标维修
Word教程Excel教程PowerPointWPS
网络工具系统工具图像工具
数据库javascript服务器
PHP教程CSS教程XML教程

canvas绘画板效果 html+css+js

更新时间:2021-06-02 11:35 作者:北极光之夜点击:
先看效果:
每天一个小Demo,分享一个有趣的canvas绘画板特效,实现并不难的,学canvas时或者js时拿来练习正正好。come on .
 
二.实现步骤(可以跟着一步一步书写):
1.先定义html标签:
.cintainer是底层盒子,然后下面就是input标签的color对象和range对象,后面再有个canvas标签。
 
<div class="container">
        <div class="item">
            颜色选择:<input type="color" value="#1E90FF" id="colour"> 
        </div>
        <div class="item">
            画笔粗细: <input type="range" value="3" min="1" max="66" id="thickness">
        </div>
        <div class="item">
           <button id="empty">清空绘画板</button>
        </div>
        <div class="item"></div>
        <canvas id="canvas">对不起,您的浏览器不支持canvas</canvas>
        </div>
 
2.开始css样式部分:
(1).先全局初始化:
 
*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    font-family: "fangsong";
    font-weight: bold;
}
 
(2).底层盒子与其儿子的基本样式:
 
.container{
    position: absolute;
    top: 30px;
    left: 30px;
    width: 250px;
    height: 95px;
    background-image: linear-gradient(135deg,white ,rgb(184, 184, 184));
    box-shadow: inset 3px 3px 6px  rgb(155, 155, 155);
    user-select: none;
}
.item{
   padding: 5px;
   width: 100%;
   height: 30px;
}
 
background-image: linear-gradient 渐变背景色。
box-shadow: inset 内阴影。
user-select: none; 文本不可选中。
 
(3).画布样式:
 
#canvas{
    position: fixed;
    top: 0;
    left: 0;
    z-index: -1000;
   box-shadow: inset 0 0  5px 5px skyblue;
}
 
3.JavaScript部分,先获取标签元素:
    // 颜色选择
    var colour = document.querySelector("#colour");
    // 粗细选择
    var thickness = document.querySelector("#thickness");
    // 清空画布按钮
    var empty = document.querySelector("#empty");
    // 获取canvas画布
    var canvas = document.querySelector("#canvas");
    var draw = canvas.getContext('2d');
 
4.初始化基本变量:
   //画笔当前的颜色
   var newColor = colour.value;
   // 画笔当前的粗细
   var newRange = thickness.value;    
   //canvas画布的宽高
   canvas.width=window.innerWidth;
   canvas.height=window.innerHeight;
 
5. 改变颜色与画笔粗细事件:
  colour.addEventListener('change',()=>{
        newColor = colour.value;
        // 确定是否改变颜色
        alert('确定改变颜色?');
        temp=0;
    })
      thickness.addEventListener('change',()=>{
        newRange = thickness.value;
    })
 
6. 实现画画功能:
// 变量,记录鼠标状态
  let temp = 0;
   //鼠标点下事件
    canvas.addEventListener("mousedown", e=>{
    // temp =1
        temp = 1;
        // 获取鼠标位置
        const x =e.clientX;
        const y = e.clientY;
        // 线条颜色
        draw.strokeStyle = newColor;
        //线条宽度
        draw.lineWidth = newRange;
        // 绘制圆形的结束线帽
        draw.lineCap = "round";
        // 开始绘制
        draw.beginPath();
        draw.moveTo(x,y);
    })
    // 鼠标移动事件
    canvas.addEventListener("mousemove",e=>{
    // 只有temp==1才触发,就是鼠标点下时
        if(temp==1){
        // 获取实时位置
            const x =e.pageX;
            const y = e.pageY;
            // 连线
            draw.lineTo(x,y);
            // 绘制路径
            draw.stroke();
        }
    })
    // 松开鼠标事件,temp=0
    canvas.addEventListener("mouseup",()=>{
        temp = 0;
    })
 
7.清空画板:
empty.addEventListener('click',()=>{
        draw.clearRect(0,0,canvas.width,canvas.height);
    })
 
三.完整代码:
HTML部分:
 
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>北极光之夜</title>
     <link rel="stylesheet" href="./index.css">
     <script  src="./index.js" ></script>
</head>
<body>
    <div class="container">
        <div class="item">
            颜色选择:<input type="color" value="#1E90FF" id="colour"> 
        </div>
        <div class="item">
            画笔粗细: <input type="range" value="3" min="1" max="66" id="thickness">
        </div>
        <div class="item">
           <button id="empty">清空绘画板</button>
        </div>
        <div class="item"></div>
        <canvas id="canvas">对不起,您的浏览器不支持canvas</canvas>
        </div>
</body>
</html>
 
CSS部分:
 
*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    font-family: "fangsong";
    font-weight: bold;
}
.container{
    position: absolute;
    top: 30px;
    left: 30px;
    width: 250px;
    height: 95px;
    background-image: linear-gradient(135deg,white ,rgb(184, 184, 184));
    box-shadow: inset 3px 3px 6px  rgb(155, 155, 155);
    user-select: none;
}
.item{
   padding: 5px;
   width: 100%;
   height: 30px;
}
#canvas{
    position: fixed;
    top: 0;
    left: 0;
    z-index: -1000;
    overflow: auto;
   box-shadow: inset 0 0  5px 5px skyblue;
}
 
JS部分:
 
window.addEventListener("load",()=>{
 
    var colour = document.querySelector("#colour");
    var thickness = document.querySelector("#thickness");
    var empty = document.querySelector("#empty");
    var canvas = document.querySelector("#canvas");
    var draw = canvas.getContext('2d');
    var newColor = colour.value;
    var newRange = thickness.value;
    
       canvas.width=window.innerWidth;
       canvas.height=window.innerHeight;
 
    colour.addEventListener('change',()=>{
        newColor = colour.value;
        console.log(newColor);
        alert('确定改变颜色?');
        temp=0;
    })
    thickness.addEventListener('change',()=>{
        newRange = thickness.value;
    })
 
    let temp = 0;
    canvas.addEventListener("mousedown", e=>{
        temp = 1;
        const x =e.clientX;
        const y = e.clientY;
        draw.strokeStyle = newColor;
        draw.lineWidth = newRange;
        draw.lineCap = "round";
        draw.beginPath();
        draw.moveTo(x,y);
    })
    canvas.addEventListener("mousemove",e=>{
        if(temp==1){
            const x =e.pageX;
            const y = e.pageY;
            draw.lineTo(x,y);
            draw.stroke();
        }
    })
    canvas.addEventListener("mouseup",()=>{
        temp = 0;
    })
    
    empty.addEventListener('click',()=>{
        draw.clearRect(0,0,canvas.width,canvas.height);
    })
})
 
四.总结:
 
以上绘画板效果就全部实现了。
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
你可能感兴趣的内容