/*background-color: transparent */
}
#div1
{
width: 800px;
height: 600px;
position: relative;
border: 1px solid black;
}
#div2
{
width: 800px;
height: 36px;
border: 1px solid black;
background-color:rgb(220,230,244) ;
}
ul
{
background-color: rgb(220,230,244);
text-align: center;
margin: 0;
padding: 0;
height: 30px;
float: left;
margin-left: 14px;
margin-right: 14px;
}
ul>li
{
float: left;
border: 1px solid gainsboro;
width: 40px;
line-height: 25px;
display: inline-block;
height: inherit;
}
button
{
padding: 0px;
}
.red
{
background-color: red;
}
.black
{
background-color: black;
}
.white
{
background-color: white;
}
.blue
{
background-color: blue;
}
.yellow
{
background-color: yellow;
}
.choice
{
border: 3px solid gold;
}
3.JS
说一下我的实现思路,定义三个变量 style、mywidth、mycolor分别代表工具类型、粗细和颜色。所以首先写的是ul下li的点击事件,并且给每一个点击的li添加一个choice类(有一个黑色的粗边框),用来表示其被选状态;
以下点击事件的代码:
var style = 0;
var mycolor = “black”;
var mywidth = 2.5;
$(function(){
//添加选中样式
$(“li”).click(function(){
$(“.cleardraw”).removeClass(“choice”);
//如果点的是那几个小标题是没有反应的
if ($(this).prop(“className”) == “firstli”) {
} else{
//先把父元素下的其他元素的选中状态移除。
$(this).parent().children().removeClass(“choice”);
$(this).addClass(“choice”);
}
})
$(“.small”).click(function(){
mywidth = 1;
})
$(“.normol”).click(function(){
mywidth = 2.5;
})
$(“.big”).click(function(){
mywidth = 5;
})
$(“#qianbi”).click(function(){
style=0;
})
$(“#juxing”).click(function(){
style=1;
})
$(“#yuanxing”).click(function(){
style=2;
})
$(“#xiangpi”).click(function(){
style=3;
})
$(“.red”).click(function(){
mycolor = “red”;
})
$(“.black”).click(function(){
mycolor = “black”;
})
$(“.white”).click(function(){
mycolor = “white”;
})
$(“.yellow”).click(function(){
mycolor = “yellow”;
})
$(“.blue”).click(function(){
mycolor = “blue”;
})
$(“.cleardraw”).click(function(){
ctx.clearRect(0,0,800,600);
})
})
这样就把click事件基本上写完了,下面来实现绘画功能,主要涉及到mousedown mousemove mouseup 三个事件
说一下我的思路,鼠标点下的时候触发mousedown函数,switch一下style,判断是铅笔还是橡皮,还是矩形或者圆~
先说铅笔,记录一下mousedown的坐标beginx和beginy,每一次鼠标move的时候,取一下这时候的event.pageX和event.pageY变量,然后在这两点之间画出线,并且修改下一次mousemove画线的起点应该是上一次的终点。也就是说,每次移动的之后都要beginx =event.pageX,beginy =event.pageY
注意:mousemove事件并不会随着你的鼠标抬起而clear,即使你把他写在了mousedown事件下,所以我用了一个lock,点击的时候lock = true 打开,mouseup的时候,lock = false锁上。后来发现更简单的方法,就是用 bind和unbind方法!
$(“#div1”).mousedown(function(event){
beginx =event.pageX;
beginy =event.pageY;
console.log(“我点下来的时候:”,beginx,beginy);
switch(style)
{
//铅笔状态
case 0:
console.log(“我选的是铅笔”);
lock0 = true;
//console.log(“我点下来的时候:”,beginx,beginy);
$(“#div1”).bind(‘mousemove’,function(event){
if(lock0)
{
ctx.beginPath();
ctx.moveTo(beginx,beginy);
ctx.lineTo(event.pageX,event.pageY);
ctx.strokeStyle = mycolor;
ctx.lineWidth = mywidth;
ctx.stroke();
beginx =event.pageX;
beginy =event.pageY;
}
})
break;
}
}
})
橡皮的思路和铅笔一样,只不过要把颜色设置成白色固定!
case 3:
console.log(“我选的是橡皮”);
lock3 = true;
//console.log(“我点下来的时候:”,beginx,beginy);
$(“#div1”).bind(‘mousemove’,function(event){
if(lock3)
{
ctx.beginPath();
ctx.moveTo(beginx,beginy);
ctx.lineTo(event.pageX,event.pageY);
ctx.strokeStyle = “white”;
ctx.lineWidth = mywidth*3;
ctx.stroke();
beginx =event.pageX;
beginy =event.pageY;
}
})
break;
然后是画矩形,这时候就用到了声明的第二个画布,我们可以把它看做成一个缓冲区,在mousemove下鼠标每次移动,先清空这个缓冲区,然后画到缓冲区里面一个矩形。mouseup的时候,也清空以下缓冲区,然后在第一张画布里根据位置声明一个一样的矩形。
代码如下:
case 1:
lock1 = true;
console.log(“画个矩形吧!”);
$(“#div1”).bind(‘mousemove’,function(event){
if(lock1)
{
ctx2.clearRect(0,0,800,600);
xx=event.pageX-beginx;
yy=event.pageY-beginy;
ctx2.beginPath();
ctx2.rect(beginx,beginy,xx,yy);
ctx2.strokeStyle = mycolor;
ctx2.lineWidth = mywidth;
ctx2.stroke();
}
})
break;
画圆的话,和画矩形局相似了,我就不赘述了。
下面是画圆的代码:
case 2 :
lock2=true;
console.log(“画个圆吧 !”)
$(“#div1”).bind(‘mousemove’,function(event){
if(lock2)
{
ctx2.clearRect(0,0,800,600);
xx=event.pageX-beginx;
yy=event.pageY-beginy;
r = Math.sqrt(xxxx+yyyy)/2;
centerx = (event.pageX+beginx)/2;
centery = (event.pageY+beginy)/2;
console.log(xx,yy,centerx,centery,r);
ctx2.beginPath();
ctx2.arc(centerx,centery,r,0,2*Math.PI,true);
ctx2.strokeStyle = mycolor;
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中…(img-p44p9Hlg-1715152824726)]
[外链图片转存中…(img-sp3ed8X9-1715152824726)]
[外链图片转存中…(img-0D9OybrW-1715152824726)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!