web涂鴉展示-canvas的線應(yīng)用的demo

一、參數(shù)來源于Android客戶端
二箭跳、html頁面
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
        <title> title </title>
        <script src="jquery.js"></script>
        <style type="text/css">
            canvas{
                border: 1px solid black;
            }
        </style>
    </head>
    <body onload="init();">
    this is body:<br/>
    <canvas id="test-canvas" width="1340px" height="500px">抱歉晨另,你的瀏覽器不支持canvas(當(dāng)瀏覽器不支持時,canvas標(biāo)簽內(nèi)的內(nèi)容會被顯示)</canvas>
    </body>
</html>
三谱姓、主要js控制

注:(此處所用demo的info雖然長度就2借尿,但數(shù)據(jù)結(jié)構(gòu)比較復(fù)雜,擴展性比較好屉来,可以正反撤銷路翻,只顯示某個人的等復(fù)雜的涂鴉操作。info正常情況下是畫一筆傳一次奶躯,對lines追加進(jìn)行追加)

<script type="text/javascript">
    var info = '[{"author":"88A0864BBEE246BF8ED59EA3FEE26E40","color":1,"id":1,"points":[{"x":0.74375,"y":0.12039801},{"x":0.7476631,"y":0.111881405},{"x":0.7859946,"y":0.087521285},{"x":0.82673794,"y":0.08850872},{"x":0.84499437,"y":0.09974015},{"x":0.8853753,"y":0.17132203},{"x":0.8897556,"y":0.21296544},{"x":0.8675483,"y":0.30277675},{"x":0.8380556,"y":0.351431},{"x":0.76671785,"y":0.4415483},{"x":0.722152,"y":0.49456975},{"x":0.7213542,"y":0.49552238}],"width":0.0020833334},{"author":"88A0864BBEE246BF8ED59EA3FEE26E40","color":1,"id":2,"points":[{"x":0.69375,"y":0.55422884},{"x":0.7009463,"y":0.54679185},{"x":0.71752954,"y":0.544742},{"x":0.72783816,"y":0.5712108},{"x":0.72734267,"y":0.6173053},{"x":0.71250314,"y":0.70410824},{"x":0.7048618,"y":0.73096216},{"x":0.7007172,"y":0.7429573},{"x":0.6974098,"y":0.74925375},{"x":0.69799846,"y":0.74352187},{"x":0.7047093,"y":0.71900743},{"x":0.7151771,"y":0.6937196},{"x":0.7264439,"y":0.67380184},{"x":0.73568565,"y":0.66138315},{"x":0.7408195,"y":0.6571788},{"x":0.7433488,"y":0.65734464},{"x":0.7453125,"y":0.67542917},{"x":0.7435694,"y":0.7035472},{"x":0.7385216,"y":0.7283287},{"x":0.72257334,"y":0.75484276},{"x":0.71770835,"y":0.74370515},{"x":0.72069967,"y":0.7128979},{"x":0.7294462,"y":0.6836851},{"x":0.7451303,"y":0.65378714},{"x":0.7606162,"y":0.62946516},{"x":0.77008843,"y":0.61740845},{"x":0.77635115,"y":0.6105905},{"x":0.7793638,"y":0.607503},{"x":0.7758453,"y":0.57187814},{"x":0.7839416,"y":0.5072019},{"x":0.8098504,"y":0.47055495},{"x":0.79448074,"y":0.55937546},{"x":0.7610427,"y":0.66774344},{"x":0.7557772,"y":0.6846293},{"x":0.75351787,"y":0.6926511},{"x":0.75951856,"y":0.6945274},{"x":0.7791436,"y":0.6695561},{"x":0.80038416,"y":0.63468504},{"x":0.8199764,"y":0.58985746},{"x":0.82938135,"y":0.55807644},{"x":0.8322831,"y":0.54168004},{"x":0.8328125,"y":0.53454083},{"x":0.81875,"y":0.5393035},{"x":0.8007047,"y":0.5842821},{"x":0.78573895,"y":0.63312054},{"x":0.7790026,"y":0.6745721},{"x":0.7776506,"y":0.6875685},{"x":0.7765945,"y":0.6962112},{"x":0.77891,"y":0.66761684},{"x":0.78773016,"y":0.5853061},{"x":0.790335,"y":0.57161635},{"x":0.7942515,"y":0.56319636},{"x":0.8126348,"y":0.6456677},{"x":0.82694346,"y":0.7595096},{"x":0.828125,"y":0.76915425},{"x":0.828125,"y":0.76915425}],"width":0.0020833334}]';
    var lines;
    var canvasWidth = 1340;
    var canvasHeight = 500;
    var drawLines = function(lineId){
        var canvas = document.getElementById('test-canvas');
        if(canvas==null){
            return;
        }
        var ctx = document.getElementById('test-canvas').getContext('2d');
        var linesLenth = lines.length;
        console.log("linesLenth:"+linesLenth);
        for(var i = 0;i < linesLenth; i++){
            var line = lines[i];
            if(lineId!=i){
                var lineColor;
                var lineWidth;
                var lineJoin = ['round','bevel','miter'];
                ctx.lineJoin = lineJoin[0];//屬性值決定了圖形中兩線段連接處所顯示的樣子
                var lineCap = ['butt','round','square'];
                ctx.lineCap = lineCap[1];//屬性 lineCap 的值決定了線段端點顯示的樣子
                ctx.lineWidth = canvasWidth*line.width;
                switch (line.color){
                    case 1: lineColor = "#000000";break;
                    case 2: lineColor = "#FF2A00";break;
                    case 3: lineColor = "#FFC600";break;
                    case 4: lineColor = "#00C6FF";break;
                    default: lineColor = "#000000";
                }
                ctx.strokeStyle = lineColor;
                var points = line.points;
                ctx.beginPath();
                var lastX = points[0].x;
                var lastY = points[0].y;
                ctx.moveTo(lastX*canvasWidth,lastY*canvasHeight);
                for(var j=0;j < points.length;j++){
                    var newX = points[j].x;
                    var newY = points[j].y;
                    ctx.quadraticCurveTo(lastX*canvasWidth,lastY*canvasHeight,((lastX+newX)/2)*canvasWidth,((lastY+newY)/2)*canvasHeight);
                    lastX = points[j].x;
                    lastY = points[j].y;
                }
                ctx.lineTo(lastX*canvasWidth,lastY*canvasHeight);
                ctx.stroke();
            }else{
                return;
            }
        }
    }
    var init = function(){
        lines = JSON.parse(info);
    }
    </script>
四帚桩、擴展js

追加lines

var saveDrawLine = function(line){
        var newLines = new Array(line.id);
        for(var i = 0;i < newLines.length;i ++){
            if(i!=newLines.length-1){
                newLines[i] = lines[i];
            }else{
                newLines[i] = line;
            }
        }
        lines = newLines;
        cleanCanvas();
        drawLines();
        return lines;
    }

清除畫布重新繪制到哪個線

var reViewCanvas = function(info){
        var id = info;
        cleanCanvas();
        drawLines(id);
    }
var cleanCanvas = function clearCanvas(){
        var canvas = document.getElementById("test-canvas");
        if(canvas!=null){
            var cxt = canvas.getContext("2d");
            cxt.clearRect(0,0,canvas.width,canvas.height);
        }
    }

補充真的涂鴉其實還有參照的,比圖在圖片上涂鴉嘹黔,所以真的在做涂鴉的功能的時候肯定是多個平臺組合账嚎,此處先寫到這里莫瞬,也算符合標(biāo)題了。

五郭蕉、demo效果

瀏覽器控制臺輸入

drawLines(2)
demo效果圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疼邀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子召锈,更是在濱河造成了極大的恐慌旁振,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涨岁,死亡現(xiàn)場離奇詭異拐袜,居然都是意外死亡,警方通過查閱死者的電腦和手機梢薪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門蹬铺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人秉撇,你說我怎么就攤上這事甜攀。” “怎么了琐馆?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵规阀,是天一觀的道長。 經(jīng)常有香客問我瘦麸,道長谁撼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任瞎暑,我火速辦了婚禮彤敛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘了赌。我一直安慰自己墨榄,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布勿她。 她就那樣靜靜地躺著袄秩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逢并。 梳的紋絲不亂的頭發(fā)上之剧,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音砍聊,去河邊找鬼背稼。 笑死,一個胖子當(dāng)著我的面吹牛玻蝌,可吹牛的內(nèi)容都是我干的蟹肘。 我是一名探鬼主播词疼,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼帘腹!你這毒婦竟也來了贰盗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤阳欲,失蹤者是張志新(化名)和其女友劉穎舵盈,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體球化,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡秽晚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了筒愚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爆惧。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖锨能,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芍耘,我是刑警寧澤址遇,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站斋竞,受9級特大地震影響倔约,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坝初,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一浸剩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鳄袍,春花似錦绢要、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哀九,卻和暖如春剿配,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阅束。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工呼胚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人息裸。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓蝇更,卻偏偏與公主長得像沪编,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子簿寂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,796評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫漾抬、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理常遂,服務(wù)發(fā)現(xiàn)纳令,斷路器,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • 查詢一個包是否被安裝 列出所有被安裝的rpm package
    廖馬兒閱讀 11,115評論 1 0
  • 1 從來不是一個有安全感的人捏雌。 大概跟長大的環(huán)境有關(guān)系吧。從上小學(xué)開始笆搓,爸爸都出去打工性湿,媽媽一個人帶著我們姐弟倆,...
    若聆閱讀 1,379評論 6 20