canvas-画板

闲来无趣写了个网页版的画图

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

<style>

*{padding:0;

margin:0;}

#mc{

display:block;

border:1px solid red;

box-shadow:0 0 10px yellow;

background:#fff;

margin-left:100px;

}

.left1 {

width:100px;

background:lightgreen;

height:600px;

position:absolute;

top:0;

left:0;

}

button {

width:80px;

text-align:center;

padding:5px 0;

margin:10px;

}

.colorPicker{

width:100px;

height:50px;

background-color:#000;

cursor:pointer;

}

.ylColor {

position:absolute;

z-index:99999;

width:250px;

background:#fff;

box-shadow:1px 1px 2px #c6d9f1, -1px -1px 2px #c6d9f1;

font-size:14px;

color:#000;

}

.ylColor .aCol {

display:inline-block;

float:left;

width:15px;

height:15px;

margin:0 7px 7px 0;

border:1px solid #eee;

cursor:pointer;

}

.ylColor .aCol:nth-child(10n) {

margin-right:0;

}

.ylColor-default {

padding:7px;

}

.ylColor-custom ul {

overflow:hidden;

padding:7px 7px 0;

}

.ylColor .title {

padding:7px;

background-color:#f4f4f8;

}

</style>

</head>

<body>

<div class="left1">

<button id="btn1">直线</button>

<button id="btn2">曲线</button>

<button id="btn3">实心矩形</button>

<button id="btn4">空心矩形</button>

<button id="btn5">实心圆</button>

<button id="btn6">空心圆</button>

<button id="btn7">清除画板</button>

<button id="btn8">橡皮</button>

<div class="colorPicker"></div>

</div>

<canvas id="mc" width="700" height="600"></canvas>

<script src="jquery.js"></script>

<script>

var btn = document.querySelectorAll('button');

var mc = document.getElementById('mc');

var ctx=mc.getContext('2d');

//点击事件,为不同的按钮绑定不同的事件

    for(var i =0;i

btn[i].onclick =function () {

var id =this.getAttribute('id');

var  a = $('.colorPicker').css('background-color');

console.log(a)

switch (id){

case 'btn1':

zhixian();

ctx.strokeStyle = a;

break;

case 'btn2':

xuxian();

ctx.strokeStyle = a;

break;

case 'btn3':

shixin();

ctx.fillStyle = a;

break;

case 'btn4':

kongxin();

ctx.strokeStyle = a;

break;

case 'btn5':

shiyuan();

ctx.fillStyle = a;

break;

case 'btn6':

kongyuan();

ctx.strokeStyle = a;

break;

case 'btn7':

qingchu();

break;

case 'btn8':

xiangpi();

break;

}

}

}

//直线

    function zhixian(){

mc.onmousedown =function (ev) {

var e = ev || window.event;

var mx = e.offsetX;

var my = e.offsetY;

ctx.beginPath();

ctx.moveTo(mx,my);

mc.onmouseup =function (ev) {

var e = ev || window.event;

ctx.lineTo(e.offsetX,e.offsetY);

ctx.stroke();

}

}

}

//虚线

    function xuxian(){

mc.onmousedown =function (ev) {

var e = ev || window.event;

ctx.beginPath();

ctx.moveTo(e.offsetX,e.offsetY);

mc.onmousemove =function (ev) {

var e = ev||window.event;

ctx.lineTo(e.offsetX,e.offsetY);

ctx.stroke();

}

mc.onmouseup =function(ev) {

var e = ev || window.event;

mc.onmousemove = mc.onmouseup  =null;

//                ctx.closePath();

            }

}

}

//实心矩形

    function shixin(){

mc.onmousedown =function (ev) {

console.log(1);

var e = ev|| window.event;

var x= e.offsetX;

var y = e.offsetY;

ctx.beginPath();

ctx.moveTo(x,y);

mc.onmouseup =function (ev) {

var e = ev||window.event;

var w =  e.offsetX - x;

var h = e.offsetY - y;

ctx.rect(x,y,w,h);

ctx.fill();

mc.onmouseup =null;

}

}

}

//空心矩形

    function kongxin(){

mc.onmousedown =function (ev) {

console.log(1);

var e = ev|| window.event;

var x= e.offsetX;

var y = e.offsetY;

ctx.beginPath();

ctx.moveTo(x,y);

mc.onmouseup =function (ev) {

var e = ev||window.event;

var w =  e.offsetX - x;

var h = e.offsetY - y;

ctx.rect(x,y,w,h);

ctx.stroke();

mc.onmouseup =null;

}

}

}

//实心圆

    function shiyuan(){

mc.onmousedown =function (ev) {

var e = ev||window.event;

var x = e.offsetX;

var y = e.offsetY;

ctx.beginPath();

//            ctx.moveTo(x,y);

            mc.onmouseup =function (ev) {

var e = ev || window.event;

var w = e.offsetX;

var h = e.offsetY;

var r = Math.sqrt(Math.pow(w-x,2)+Math.pow(h-y,2));

var d = r /2;

var x2 = (w - x) /2 + x;

var y2 = (h - y) /2 + y;

//                console.log(r);

                ctx.arc(x2,y2,d,0,Math.PI*2);

ctx.fill()  ;

mc.onmouseup =null;

}

}

}

//空心圆

    function kongyuan(){

mc.onmousedown =function (ev) {

var e = ev||window.event;

var x = e.offsetX;

var y = e.offsetY;

ctx.beginPath();

//            ctx.moveTo(x,y);

            mc.onmouseup =function (ev) {

var e = ev || window.event;

var w = e.offsetX;

var h = e.offsetY;

var r = Math.sqrt(Math.pow(w-x,2)+Math.pow(h-y,2));

var d = r /2;

var x2 = (w - x) /2 + x;

var y2 = (h - y) /2 + y;

//                console.log(r);

                ctx.arc(x2,y2,d,0,Math.PI*2);

ctx.stroke();

mc.onmouseup =null;

}

}

}

//清除画板

    function qingchu(){

ctx.clearRect(0,0,700,600);

}

//橡皮

    function xiangpi(){

mc.onmousedown =function (e) {

mc.onmousemove =function (e) {

ctx.clearRect(e.offsetX,e.offsetY,30,30);

}

}

mc.onmouseup =function (e) {

mc.onmousedown =null;

mc.onmousemove =null;

}

}

</script>

<script>

;(function($){

$.fn.ylColor =function(options){

var defaults = {

containerId:'ylColor',

left:50,

top:0,

defaultColor:'#000'

            };

defaults.customColor = [

'#fff','#000','#eeece1','#1f497d','#4f81bd',

'#c0504d','#9bbb59','#8064a2','#4bacc6','#f79646',

'#f2f2f2','#808080','#ddd9c3','#c6d9f1','#dce6f2',

'#f2dcdb','#ebf1de','#e6e0ec','#dbeef4','#fdeada',

'#d9d9d9','#595959','#c4bd97','#8eb4e3','#b9cde5',

'#e6b9b8','#d7e4bd','#ccc1da','#b7dee8','#fcd5b5',

'#bfbfbf','#404040','#948a54','#558ed5','#95b3d7',

'#d99694','#c3d69b','#b3a2c7','#93cddd','#fac090',

'#a6a6a6','#262626','#4a452a','#17375e','#376092',

'#953735','#77933c','#604a7b','#31859c','#e46c0a',

'#7f7f7f','#0d0d0d','#1e1c11','#10243f','#254061',

'#632523','#4f6228','#403152','#215968','#984807'

            ];

defaults.formatColor = [

'#c00000','#ff0000','#ffc000','#ffff00','#92d050',

'#00b050','#00b0f0','#0070c0','#002060','#7030a0'

            ];

var settings = $.extend(defaults,options);

var elems =this;

var cur_elem;

var event =function(){

$(elems).each(function(){

$(this).click(function(){

show(this);

});

});

$('#' + settings.containerId).find('.aCol').click(function(){

onSelect(this);

});

};

var build =function(){

var containerId = settings.containerId;

var containerDiv = $('<div id="'+ containerId+'" class="ylColor" style="display: none"></div>');

var defaultDiv = $('<div class="ylColor-default"></div>');

var customDiv = $('<div class="ylColor-custom"></div>');

var formatDiv = $('<div class="ylColor-format"></div>');

defaultDiv.append('<span class="aCol" style="background-color: '+ settings.defaultColor +'" title="'+settings.defaultColor +'"></span>自动');

var liHtml ='';

$.each(settings.customColor,function(i,e){

liHtml +='<li class="aCol" data-color="'+e+'" style="background-color: '+ e +'" title="'+ e +'"></li>';

});

customDiv.append('<div class="title">主题颜色</div><ul>'+liHtml+'</ul>');

liHtml ='';

$.each(settings.formatColor,function(i,e){

liHtml +='<li class="aCol" data-color="'+e+'" style="background-color: '+e+'" title="'+ e +'"></li>';

});

customDiv.append('<div class="title">标准色</div><ul>'+liHtml+'</ul>');

if($('#' + containerId).length ==0){

//不存在,则创建

                    $('body').append(containerDiv);

}

containerDiv.append(defaultDiv,customDiv,formatDiv);

}

var show =function(elem){

cur_elem = elem;

var top = $(elem).offset().top;

var left = $(elem).offset().left;

$('#' + settings.containerId).css({

top: top + settings.top,

left: left + settings.left,

}).fadeIn();

};

var onSelect =function(selectOne){

$('#'+ settings.containerId).fadeOut();

if(options.onSelect){

options.onSelect(selectOne,cur_elem);

}

};

build();

event();

return this;

};

})(jQuery);

$('.colorPicker').ylColor({

left:220,

onSelect:function(oCol,elem){

var color = $(oCol).attr('data-color');

$('.colorPicker').css({'background-color':color});

}

});

</script>

</body>

</html>

此处的jquery需要自己从网上下,自己重新导入进去就可以


效果图


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容