成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > canvas小畫板之平滑曲線的實現(xiàn)

canvas小畫板之平滑曲線的實現(xiàn)

熱門標簽:電話機器人電銷系統(tǒng)掙話費 南昌仁和怎么申請開通400電話 高德地圖標注地點糾錯 拓展地圖標注 機器人外呼系統(tǒng)存在哪些能力 只辦理400電話 平?jīng)龅貓D標注位置怎么弄 電話機器人黑斑馬免費 如何獲取地圖標注客戶

功能需求

項目需求:需要實現(xiàn)一個可以自由書寫的小畫板

簡單實現(xiàn)

對于熟悉canvas的同學來說,這個需求很簡單,大致邏輯如下:

1)監(jiān)聽事件pointerdown,pointermove,pointerup

2)標記是否拖拽畫線模式變量 isDrawing,在down事件時置為true,up的時候置為false

3)使用canvas的api,設(shè)置線條樣式,調(diào)用繪制線條接口lineTo方法

短短幾十行代碼就能實現(xiàn):

<!doctype html>
<html>

<head>
    <meta charset=utf-8>
    <style>
        canvas {
            border: 1px solid #ccc
        }

        body {
            margin: 0;
        }
    </style>
</head>

<body style="overflow: hidden;background-color: rgb(250, 250, 250);touch-action: none;">
    <canvas id="c" width="1920" height="1080"></canvas>
    <script>
        var el = document.getElementById('c');
        var ctx = el.getContext('2d');
        //設(shè)置繪制線條樣式
        ctx.strokeStyle = 'red';
        ctx.lineWidth = 1;
        ctx.lineJoin = 'round';
        ctx.lineCap = 'round';
        var isDrawing;//標記是否要繪制
        //存儲坐標點
        let lastX, lastY;
        document.body.onpointerdown = function (e) {
            console.log('pointerdown');
            isDrawing = true;
            lastX = e.clientX;
            lastY = e.clientY;
        };
        document.body.onpointermove = function (e) {
            console.log('pointermove');
            if (isDrawing) {
                draw(e.clientX, e.clientY, lastX, lastY);
            }
            lastX = e.clientX, lastY = e.clientY;
        };
        document.body.onpointerup = function (e) {
            if (isDrawing) {
                draw(e.clientX, e.clientY, lastX, lastY);
            }
            lastX = e.clientX, lastY = e.clientY;
            isDrawing = false;
        };

        function draw(x, y, lastX, lastY) {
            ctx.beginPath();
            ctx.moveTo(lastX, lastY);
            ctx.lineTo(x, y);
            ctx.stroke();
        }
    </script>
</body>
</html>

實現(xiàn)效果如下圖:

以上就簡單的實現(xiàn)了畫板功能,如果要求不高的用戶可以使用,但一旦遇到有點要求的用戶就無法交付這種產(chǎn)品,仔細看是線條折線感太強。

為什么會有折線感呢?

主要原因:

我們調(diào)用的api方法lineTo是兩點連線也就是直線

瀏覽器對鼠標事件mousemove的采集是有采集頻率的,并不是每個鼠標移動經(jīng)過的每一個像素點都會觸發(fā)事件。

當鼠標移動的越快,那么兩點之間的間隔就越遠,那么折線感就更明顯。

如何能繪制平滑的曲線?

canvas提供的api中是有現(xiàn)成接口的,貝塞爾系列的接口就能滿足我們的要求,接下來我們講一下使用二次貝塞爾曲線繪制平滑曲線。

quadraticCurveTo(cpx,cpy,x,y)

二次貝塞爾曲線接口需要四個參數(shù),cpx,cpy是曲線的控制點,x,y是曲線終點。

有人問那曲線的起點在哪里?其實曲線的起點取決于上一操作狀態(tài),可以是moveTo的位置,或者是lineTo的位置,或者是貝塞爾的終點。

那么怎么調(diào)用quadraticCurveTo,參數(shù)怎么傳呢?

我們需要找出關(guān)鍵位置,直接用例子告訴大家吧

1)假如我們用鼠標采集到ABCDEF六個點

2)取前面三個點ABC計算,BC的中點B1,以A為起點,B為控制點,B1為終點,那么利用quadraticCurveTo可以繪制出這樣一條貝塞爾曲線

3)接下來計算CD的中點C1,以B1為起點,C為控制點,C1為終點,那么利用quadraticCurveTo可以繪制出這樣一條貝塞爾曲線

4)以此類推,當?shù)搅俗詈笠粋€點時以D1為起點,E為控制點,F(xiàn)為終點,結(jié)束貝塞爾繪制。

根據(jù)算法進行代碼改造

OK我們介紹了具體算法的影響,那用該算法對我們前面的代碼進行改造:

<!doctype html>
<html>

<head>
    <meta charset=utf-8>
    <style>
        canvas {
            border: 1px solid #ccc
        }

        body {
            margin: 0;
        }
    </style>
</head>

<body style="overflow: hidden;background-color: rgb(250, 250, 250);touch-action: none;">
    <canvas id="c" width="1920" height="1080"></canvas>
    <script>
        var el = document.getElementById('c');
        var ctx = el.getContext('2d');
        //設(shè)置繪制線條樣式
        ctx.strokeStyle = 'red';
        ctx.lineWidth = 1;
        ctx.lineJoin = 'round';
        ctx.lineCap = 'round';
        var isDrawing;//標記是否要繪制
        //存儲坐標點
        let points = [];
        document.body.onpointerdown = function (e) {
            console.log('pointerdown');
            isDrawing = true;
            points.push({ x: e.clientX, y: e.clientY });
        };
        document.body.onpointermove = function (e) {
            console.log('pointermove');
            if (isDrawing) {
                draw(e.clientX, e.clientY);
            }

        };
        document.body.onpointerup = function (e) {
            if (isDrawing) {
                draw(e.clientX, e.clientY);
            }
            points = [];
            isDrawing = false;
        };

        function draw(mousex, mousey) {
            points.push({ x: mousex, y: mousey });
            ctx.beginPath();
            let x = (points[points.length - 2].x + points[points.length - 1].x) / 2,
                y = (points[points.length - 2].y + points[points.length - 1].y) / 2;
            if (points.length == 2) {
                ctx.moveTo(points[points.length - 2].x, points[points.length - 2].y);
                ctx.lineTo(x, y);
            } else {
                let lastX = (points[points.length - 3].x + points[points.length - 2].x) / 2,
                    lastY = (points[points.length - 3].y + points[points.length - 2].y) / 2;
                ctx.moveTo(lastX, lastY);
                ctx.quadraticCurveTo(points[points.length - 2].x, points[points.length - 2].y, x, y);
            }
            ctx.stroke();
            points.slice(0, 1);

        }
    </script>
</body>

</html>

在原有基礎(chǔ)上我們用了一個數(shù)組points保存鼠標經(jīng)過的點,根據(jù)算法可知繪制貝塞爾曲線至少要用三個點,繪制過程中維護points數(shù)組。

實現(xiàn)效果如下,可見平滑了很多!

后續(xù)文章:

實現(xiàn)蠟筆效果,實現(xiàn)筆鋒效果,畫筆性能優(yōu)化

到此這篇關(guān)于canvas小畫板之平滑曲線的實現(xiàn)的文章就介紹到這了,更多相關(guān)canvas平滑曲線內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

標簽:青島 漯河 西藏 棗莊 池州 遼源 永州 新疆

巨人網(wǎng)絡(luò)通訊聲明:本文標題《canvas小畫板之平滑曲線的實現(xiàn)》,本文關(guān)鍵詞  canvas,小,畫板,之,平滑,曲線,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《canvas小畫板之平滑曲線的實現(xiàn)》相關(guān)的同類信息!
  • 本頁收集關(guān)于canvas小畫板之平滑曲線的實現(xiàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚洲精品欧美激情| 欧美激情视频一区二区三区不卡| 欧美人牲a欧美精品| 亚洲国产天堂网精品网站| 日本五十路女优| gay视频丨vk| 亚洲一区二区在线免费| 免费精品一区| 99sesese| 美女的奶胸大爽爽大片| 日韩精品一区国产| 亚洲三级电影全部在线观看高清| 日本道色综合久久影院| 国产精品69av| 欧美在线观看在线观看| 欧美一区二区三区日韩视频| 国产精品永久| 亚洲成va人在线观看| 国产免费高清视频| 欧美乱大交xxxx| 亚洲免费av一区二区| 中文字幕手机在线观看| 日韩av午夜在线观看| 欧美成人高清视频在线观看| 中文字幕超清在线免费观看| 久久亚洲精精品中文字幕早川悠里| 国产一级免费| 在线观看麻豆| 欧美日韩不卡一区二区| 国产在线麻豆精品| 日韩欧美国产不卡| 在线观看私人影院w| 成人精品久久av网站| 深爱激情综合网| 大地资源网3页在线观看| 午夜看片在线免费| 可以免费看污视频的网站在线| 国产一区二区视频免费在线观看| 免费看的www视频网站视频| 国产免费美女视频| 国产麻豆视频在线观看| 一本久久a久久精品vr综合| 日本视频精品一区| 久久久久久九九九| 一区二区三区天堂av| 免费看特级毛片| 91av中文字幕| 欧美成人三级在线观看| 一区二区三区在线视频观看58| 天天干天天曰天天操| 婷婷成人影院| 茄子视频成人在线| 成人xxxx| 欧美xxxx黑人xyx性爽| 成人一级片在线观看| 91精品国产综合久久香蕉的特点| 黄色av免费看| 亚洲激情视频小说| 国产无遮挡又黄又爽又色视频| 中国xxxx自拍视频| 欧美精品一区二区三区四区五区| 成人一区二区| 韩国三级电影在线观看婷婷| 粉嫩小泬无遮挡久久久久久| 欧美日韩国产123区| 风流少妇一区二区三区91| 久久国产香蕉视频| 欧洲av一区二区嗯嗯嗯啊| 亚洲va久久久噜噜噜无码久久| 亚洲欧美中文字幕在线观看| 国产男女猛烈无遮挡91| 国产精品影视| 97人妻精品一区二区三区免| 免费欧美日韩国产三级电影| 老熟女高潮一区二区三区| 国产精品区一区二区三含羞草| 国产精品久久久久一区| 男女性色大片免费观看一区二区| 久草福利在线视频| av网页在线观看| 午夜精品久久久久影视| 中文字幕欧美激情极品| 精品视频在线观看一区| 国产欧美一区二区三区四区| 久久久精品99| 99精品热6080yy久久| 伊人久久亚洲美女图片| 黄动漫在线观看| 波多野结衣在线影院| 天天操夜夜干| 国内外成人免费激情在线视频| 青青草av免费在线观看| 天堂精品在线视频| 国产美女视频一区二区三区| 亚洲成av人**亚洲成av**| 理论片在线观看理伦片| 久草在线免费二| 一区二区免费在线视频| 亚洲精品国偷拍自产在线观看蜜桃| 精品美女一区二区三区| 91视频免费看片| 日韩精品一区二区在线观看| www.狠狠操.com| 久久精品亚洲精品| 人人做人人澡人人爽欧美| www.99久久热国产日韩欧美.com| 亚洲视频精选| 欧美日韩国产天堂| 青青草国产成人久久91网| 亚洲欧美日本一区二区三区| 思热99re视热频这里只精品| 国产精品久久久久77777丨| 深夜福利91大全| 精品视频一区二区观看| 玖玖玖免费嫩草在线影院一区| 国产精品免费播放| 一级毛片在线观| 成年人小视频网站| 色婷婷.com| 欧美精品一区二区三区在线看午夜| 日本精品一区二区三区四区的功能| 国产福利在线观看视频| 久久国内精品自在自线400部| 成人网ww555视频免费看| segui88久久综合9999| 综合毛片免费视频| 激情网站在线| 天天操天天操天天色天天要| 国产 日韩 欧美一区| 国产精品私房写真福利视频| 熟女少妇在线视频播放| 五月天六月丁香| 欧美亚洲综合久久| 播五月开心婷婷综合| 久久成人这里只有精品| 日韩精品欧美国产精品忘忧草| 快播电影网址老女人久久| 亚洲国产一区二区久久| 国产欧美日韩卡一| 一本一道dvd在线观看免费视频| 国产大片中文字幕在线观看| 99久久久久国产精品免费| 中文字幕国产亚洲| 日韩电影免费在线观看中文字幕| 一区二区视频欧美| 欧美韩国日本一区| 久久久久青草大香线综合精品| 一级毛片视频在线观看| 亚洲欧美视频| 一区二区三区免费在线视频| 熟妇人妻无乱码中文字幕真矢织江| 国产91视频在线| 欧洲美女免费图片一区| 青青草国产成人av片免费| 亚洲精品第一国产综合精品| 欧美午夜精品久久久久久蜜| 国产日韩欧美精品在线| 久久久久久12| 都市激情亚洲| 你懂的视频在线一区二区| 四季久久免费一区二区三区四区| 成人在线分类| 探花国产精品| 日韩精品一二三区| 色综合久久久久久久久五月| 亚洲激情啪啪| 高h震动喷水双性1v1| 欧美性生交片4| 亚洲免费视频一区二区| 波兰性xxxxx极品hd| 视频在线观看成人| 浮力国产第一页| 亚洲女人av| 成人高清视频在线观看| 日韩电影免费网址| 国产成人在线小视频| 六月丁香婷婷综合| 妖精视频一区二区三区免费观看| 亚洲制服丝袜在线| 免费国产在线精品一区二区三区| 一区二区在线观看视频在线| 日韩高清国产一区在线观看| 国产91精品视频在线观看| jzzjzzjzz亚洲成熟少妇| 日产欧产美韩系列久久99| 久久久高清视频| 成人短视频下载| 岛国大片在线观看| 自拍一区在线观看| 国产精品久99| 蜜臀精品久久久久久蜜臀| 久久精品视频中文字幕| 亚洲国产成人精品久久| 国产不卡高清在线观看视频| 日韩精品久久久久久久电影99爱| 91看片在线免费观看| 久久久久久久久久久久久久久| 污视频免费在线看| 调教视频vk| 日韩毛片高清在线播放| 欧美色图国产精品| 日韩美女激情视频| 2023国产精品| 麻豆专区一区二区三区四区五区| 国产精品一级在线观看| 99久久久无码国产精品性| 国产极品嫩模在线视频一区| 亚洲日本伦理| 女同一区二区三区| 日韩在线观看免费高清完整版| 亚洲尤物在线视频| 99在线精品免费视频| 欧美精品中文| 黄色片网站在线免费观看| 亚洲www啪成人一区二区麻豆| 欧美成人精品一区二区| 欧美少妇精品| 中文字幕一区二区三区乱码| 97精品一区二区| 色偷偷在线观看| 欧美男男gaytwinkfreevideos| 久久久久久久久久码影片| 日韩在线免费高清视频| 欧美日本精品一区二区三区| 亚洲蜜桃在线| www.一区二区.com| 强行糟蹋人妻hd中文| 中文字幕色一区二区| 偷拍一区二区三区四区| 日韩精品在线播放视频| 亚洲GV成人无码久久精品| 久久aⅴ国产欧美74aaa| 少妇性l交大片7724com| 日本一本高清视频| 国产亚洲欧美日韩精品一区二区三区| www.夜夜骑.com| 久久精品久久精品久久| 午夜一区二区三区视频| 国产经典一区二区三区| 国产美女久久久久久| 欧美日韩亚洲天堂| 免费在线观看av的网站| 亚洲欧洲日韩一区二区三区| 欧美最猛性xxxx免费| 中文字幕亚洲欧美日韩| 国产午夜亚洲精品一级在线| 天堂av中文字幕| 国产一区二区0| 久久国产精品99久久久久久丝袜| 天天综合久久| 日本午夜精华| 337p日本欧洲亚洲大胆精品| 久久久久久久国产精品影院| 婷婷中文字幕一区三区| 亚洲天堂第一区| 成年人视频在线观看免费| 欧美视频在线观看免费网址| 日韩一区二区三区四区| 国产wwwxxx| 日本在线视频中文有码| 中文字幕午夜精品一区二区三区| 欧美精品三级日韩久久| 亚洲午夜女主播在线直播| 免费观看黄色大片| 国产免费av国片精品草莓男男| 色18美女社区| 尤物网址在线观看| 1024欧美极品| 国产精品久久中文字幕| 精品国产青草久久久久96| 欧美亚洲国产一区在线观看网站| 亚洲天堂成人在线观看| 色yeye免费人成网站在线观看| 懂色av懂色av粉嫩av| 91麻豆精品久久毛片一级| 午夜免费福利视频在线观看| 欧美xxxx少妇| 天天操天天综合网| 久久久久.com| 韩日成人在线| 欧美超级免费视 在线| 日韩欧美一区二区三区在线观看| 国产成人免费在线| 制服视频三区第一页精品| 四虎成年永久免费网站| 成人免费在线观看| 最近免费观看高清韩国日本大全| 日本不卡高清视频一区| 91影院在线免费观看视频| 日韩精品高清在线| 国产一区二三区| 久久久伦理片| 国产中文av在线| 日韩大片免费观看| 午夜电影福利网| www.狠狠艹| 伊人久久99| 非洲一级黄色片| 久久一区激情| 91精品一区二区三区在线观看| 青青草视频免费在线观看| 熟妇人妻av无码一区二区三区| 亚洲天堂一区在线| 亚洲国产精品高清久久久| 红桃一区二区三区| 亚洲精品乱码久久久久久蜜桃欧美| 日韩免费在线免费观看| 亚洲免费网站在线观看| 精品国产乱码久久久久久影片| 国产主播在线资源| 欧美做暖暖视频| 丁香六月久久综合狠狠色| 中文字幕中文字幕在线十八区| 亚洲国产精品无码久久久| 日韩欧美高清一区| 男男一级淫片免费播放| 亚洲欧洲国产日本综合| 免费一级在线观看播放网址| 久久免费视频6| 97午夜影院| 欧美主播一区二区三区美女| 欧美一区二区影视| 久热精品视频在线免费观看| 欧美经典一区| 九九99玖玖| swag国产精品一区二区| 国产精品99久久久久久大便| 国内自拍视频一区二区三区|