最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS+HTML5 Canvas實(shí)現(xiàn)簡(jiǎn)單的寫(xiě)字板功能示例

 更新時(shí)間:2018年08月30日 09:47:58   作者:鄒大叔  
這篇文章主要介紹了JS+HTML5 Canvas實(shí)現(xiàn)簡(jiǎn)單的寫(xiě)字板功能,結(jié)合實(shí)例形式分析了js結(jié)合HTML5 canvas特性的圖形繪制相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了JS+HTML5 Canvas實(shí)現(xiàn)簡(jiǎn)單的寫(xiě)字板功能。分享給大家供大家參考,具體如下:

先來(lái)看運(yùn)行效果:

具體代碼如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>m.fzitv.net JS寫(xiě)字板</title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <style type="text/css">
        body,html {
            padding: 0;
            margin: 0;
        }
        a,div,span {
            font-family: "Arial","Microsoft YaHei","黑體","宋體",sans-serif;
        }
        .canvas-box {
            display: block;
            margin: 40px auto;
            background: #f5f5f5;
        }
        .color-box {
            width: 1080px;
            display: block;
            margin: 20px auto;
            text-align: center;
        }
        .color-item {
            display: inline-block;
            vertical-align: middle;
            width: 48px;
            height: 24px;
            margin: 10px;
            background: #989898;
            cursor: pointer;
        }
        .red {
            background: #e01d5b;
        }
        .blue {
            background: #1d6ae0;
        }
        .green {
            background: #1de087;
        }
        .yellow {
            background: #f3e41d;
        }
        .orange {
            background: #f9850b;
        }
        .black {
            background: #333;
        }
        .color-item.active {
            border: solid 3px #565656;
        }
        .btn {
            display: block;
            width: 120px;
            height: 40px;
            line-height: 40px;
            margin: 10px auto;
            text-align: center;
            font-size: 18px;
            border: solid 1px #999;
            border-radius: 5px;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <canvas class="canvas-box" id="canvas"></canvas>
    <div class="color-box">
        <span class="color-item red"></span>
        <span class="color-item blue"></span>
        <span class="color-item green"></span>
        <span class="color-item yellow"></span>
        <span class="color-item orange"></span>
        <span class="color-item black active"></span>
    </div>
    <div class="btn" onclick="clearDraw()">清除</div>
<script type="text/javascript">
var    canvas = document.getElementById('canvas');
var    context = canvas.getContext("2d");
var    isDraw = false; //定義變量控制畫(huà)筆是否可用
var movePos;         //定義變量存放初始畫(huà)筆開(kāi)始位置
var linWidth = 10;
var linColor = '#333';
window.onload = function(){
    draw();
}
function draw(){
    canvas.width = 500;
    canvas.height = 500;
    context.strokeStyle = "red";
    context.lineWidth = 10;
    context.beginPath();
    context.strokeRect(0,0,500,500);
    //設(shè)置畫(huà)筆顏色,寬度
    context.strokeStyle = "red";
    context.lineWidth = 1;
    //使線段連續(xù),圓滑
    context.lineCap = "round";
    context.lineJoin = "round";
    drawDashedLine(context,0,0,500,500);
    drawDashedLine(context,0,500,500,0);
    drawLine(context,0,250,500,250);
    drawLine(context,250,0,250,500);
}
//畫(huà)虛線(參照網(wǎng)上大神)
function drawDashedLine(context, x1, y1, x2, y2, dashLength) {
  dashLength = dashLength === undefined ? 5 : dashLength;
  var deltaX = x2 - x1;
  var deltaY = y2 - y1;
  var numDashes = Math.floor(
   Math.sqrt(deltaX * deltaX + deltaY * deltaY) / dashLength);
   for (var i=0; i < numDashes; ++i) {
   context[ i % 2 === 0 ? 'moveTo' : 'lineTo' ]    (x1 + (deltaX / numDashes) * i, y1 + (deltaY / numDashes) * i);
   }
  context.stroke();
};
//畫(huà)直線
function drawLine(context,x1,y1,x2,y2){
    context.moveTo(x1,y1);
    context.lineTo(x2,y2);
    context.stroke();
};
//獲取鼠標(biāo)相對(duì)與canvas位置
function getPos(x,y){
    var box = canvas.getBoundingClientRect();
    return {x: x-box.left,y: y-box.top};
};
//畫(huà)筆
function drawing(e){
    if(isDraw){
        var position = getPos(e.clientX,e.clientY);
        context.strokeStyle = linColor;
        context.lineWidth = linWidth;
        context.save();
        context.beginPath();
        context.moveTo(movePos.x,movePos.y);
        context.lineTo(position.x,position.y);
        context.stroke();
        movePos = position;
        context.restore();
    }
}
//鼠標(biāo)點(diǎn)下
canvas.onmousedown = function(e){
    isDraw = true;
    movePos = getPos(e.clientX,e.clientY);
    drawing(e);
}
//鼠標(biāo)移動(dòng)
canvas.onmousemove = function(e){
    drawing(e);
}
//鼠標(biāo)松開(kāi)
canvas.onmouseup = function(e){
    isDraw = false;
}
//鼠標(biāo)離開(kāi)
canvas.onmouseout =function(e){
    isDraw = false;
}
//選擇畫(huà)筆顏色
$('.color-item').on('click',function(){
    $(this).addClass('active').siblings().removeClass('active');
    linColor = $(this).css('background-color');
});
//清除
function clearDraw(){
    context.clearRect(0,0,500,500);
    draw();
}
</script>
</body>
</html>

感興趣的朋友還可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼,親身體驗(yàn)一下運(yùn)行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容還可查看本站專(zhuān)題:《JavaScript+HTML5特效與技巧匯總》、《JavaScript圖形繪制技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 原生JS實(shí)現(xiàn)拖拽功能

    原生JS實(shí)現(xiàn)拖拽功能

    這篇文章主要為大家介紹了JS實(shí)現(xiàn)拖拽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • javascript原型鏈學(xué)習(xí)記錄之繼承實(shí)現(xiàn)方式分析

    javascript原型鏈學(xué)習(xí)記錄之繼承實(shí)現(xiàn)方式分析

    這篇文章主要介紹了javascript原型鏈學(xué)習(xí)記錄之繼承實(shí)現(xiàn)方式,結(jié)合實(shí)例形式分析了javascript使用原型鏈實(shí)現(xiàn)繼承的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-05-05
  • javascript中sort() 方法使用詳解

    javascript中sort() 方法使用詳解

    sort()方法主要是用于對(duì)數(shù)組進(jìn)行排序,默認(rèn)情況下該方法是將數(shù)組元素轉(zhuǎn)換成字符串,然后按照ASC碼進(jìn)行排序,這個(gè)大家都能理解,但如果數(shù)組元素是一個(gè)Object呢,轉(zhuǎn)不了字符串,難道不能進(jìn)行排序?答案當(dāng)然是否定的,那么我們就來(lái)詳細(xì)探討下sort()方法的使用
    2015-08-08
  • Express代理轉(zhuǎn)發(fā)服務(wù)器實(shí)現(xiàn)

    Express代理轉(zhuǎn)發(fā)服務(wù)器實(shí)現(xiàn)

    這篇文章主要為大家介紹了Express代理轉(zhuǎn)發(fā)服務(wù)器實(shí)現(xiàn)技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • JS獲取地址欄參數(shù)的兩種方法(簡(jiǎn)單實(shí)用)

    JS獲取地址欄參數(shù)的兩種方法(簡(jiǎn)單實(shí)用)

    這篇文章主要介紹了JS獲取地址欄參數(shù)的兩種方法(簡(jiǎn)單實(shí)用),小編給大家推薦使用第一種采用正則表達(dá)式獲取地址欄參數(shù)的方法,此方法簡(jiǎn)單實(shí)用,對(duì)js獲取地址欄參數(shù)相關(guān)知識(shí)感興趣的朋友,一起學(xué)習(xí)吧
    2016-06-06
  • Bootstrap table表格初始化表格數(shù)據(jù)的方法

    Bootstrap table表格初始化表格數(shù)據(jù)的方法

    這篇文章主要介紹了Bootstrap-table表格初始化表格數(shù)據(jù)的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • 詳解JavaScript實(shí)現(xiàn)繼承的五種經(jīng)典方式(附圖解)

    詳解JavaScript實(shí)現(xiàn)繼承的五種經(jīng)典方式(附圖解)

    JavaScript中的繼承是一種機(jī)制,通過(guò)它可以創(chuàng)建一個(gè)對(duì)象,該對(duì)象可以享有另一個(gè)對(duì)象的屬性和方法,本文將詳細(xì)的為大家介紹實(shí)現(xiàn)繼承的五種經(jīng)典方式,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2023-08-08
  • 微信小程序封裝自定義彈窗的實(shí)現(xiàn)代碼

    微信小程序封裝自定義彈窗的實(shí)現(xiàn)代碼

    這篇文章主要介紹了微信小程序封裝自定義彈窗的實(shí)現(xiàn)代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • 微信小程序?qū)崿F(xiàn)滑動(dòng)/點(diǎn)擊切換Tab及scroll-left的使用

    微信小程序?qū)崿F(xiàn)滑動(dòng)/點(diǎn)擊切換Tab及scroll-left的使用

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)滑動(dòng)/點(diǎn)擊切換Tab,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • JS獲取子節(jié)點(diǎn)、父節(jié)點(diǎn)和兄弟節(jié)點(diǎn)的方法實(shí)例總結(jié)

    JS獲取子節(jié)點(diǎn)、父節(jié)點(diǎn)和兄弟節(jié)點(diǎn)的方法實(shí)例總結(jié)

    這篇文章主要介紹了JS獲取子節(jié)點(diǎn)、父節(jié)點(diǎn)和兄弟節(jié)點(diǎn)的方法,結(jié)合實(shí)例形式總結(jié)分析了JavaScript針對(duì)子節(jié)點(diǎn)、父節(jié)點(diǎn)和兄弟節(jié)點(diǎn)獲取相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2018-07-07

最新評(píng)論

泸州市| 比如县| 长岭县| 屯昌县| 彭山县| 郯城县| 景洪市| 宝丰县| 淮南市| 哈巴河县| 磐石市| 喀喇| 綦江县| 河曲县| 新蔡县| 五家渠市| 屯门区| 奈曼旗| 金沙县| 新闻| 新化县| 深水埗区| 故城县| 徐州市| 横峰县| 阳东县| 博兴县| 衡水市| 朝阳市| 达孜县| 刚察县| 施秉县| 灌阳县| 阜阳市| 绥化市| 油尖旺区| 北辰区| 大新县| 肃宁县| 冷水江市| 襄垣县|