首页 > 代码库 > Canvas---Canvas版画图、虚线、辅助线、线条颜色、线条宽度,整合加强版

Canvas---Canvas版画图、虚线、辅助线、线条颜色、线条宽度,整合加强版



使用Canvas实现画图程序。

本次更新主要实现了一下功能:

虚线实线的选择、辅助线、线条颜色选择、线条宽度选择

进一步整理了下代码,发现了不少很有用的写法,具体看下面。

效果截图:

技术分享

源代码:

①HTML代码

<!docutype html>
<!--date 2014-12-28-->
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <style type="text/css">
            canvas{
                background-color: rgb(247, 247, 247);
                margin-top: 10px;
            }
        </style>
    </head>
    <body>
        <div class="controls">
            线条类型<select id="lineTypeSelectBox">
            <option value=http://www.mamicode.com/"solid">实线>

②绘制坐标轴与网格

在第一篇里有,我没改动

http://blog.csdn.net/mikuscallion/article/details/43115917

③绘制虚线

//绘制虚线
//传入参数:上下文,起点,终点,虚线间隔
function drawDashedLine(context,x1,y1,x2,y2,dashLength){
        //运用三元表达式实现默认参数
        dashLength = dashLength===undefined ? 5 : dashLength;
        //水平长度
        var deltaX = x2 - x1;
        //垂直长度
        var deltaY = y2 - y1;
        //虚线数量
        var numDashed = Math.floor(
            Math.sqrt(deltaX*deltaX+deltaY*deltaY)/dashLength
        );
        //开始绘制
        context.beginPath();
        for(var i=0; i<numDashed;i++){
            //这种写法太强大了
            //(deltaX/numDashed)是指虚线的长度
            context[i%2===0 ? "moveTo":"lineTo"](x1+(deltaX/numDashed)*i,y1+(deltaY/numDashed)*i);
            }
        //要记得描线啊
        context.stroke();
        //结束绘制
        context.closePath();
}

④主要绘图代码

//Vars--------------------------------------------------------
        var canvas =document.getElementById("canvas"),
            context =canvas.getContext("2d"),
            //正在绘制的绘图表面变量
            drawingSurfaceImageData,
            //鼠标按下相关对象
            mousedown = {},
            //橡皮筋矩形对象
            rubberbandRect = {},
            //拖动标识变量
            dragging = false;
        
        //控件
        //擦除画布的控制
        var eraseAllButton = document.getElementById("eraseAllButton");
        //坐标轴的控制
        var axesCheckBox = document.getElementById("axesCheckBox");
        //网格线的控制
        var gridCheckBox = document.getElementById("gridCheckBox");
        //辅助线的控制
        var guideWiresCheckBox = document.getElementById("guideWiresCheckBox"); 
        //线条颜色的控制
        var strokeColorSelectBox =document.getElementById("strokeColorSelectBox");
        //线条样式的控制
        var lineTypeSelectBox = document.getElementById("lineTypeSelectBox");
        //线条宽度的控制
        var lineWidthSelectBox = document.getElementById("lineWidthSelectBox");
//Functions---------------------------------------------------
        //将窗口坐标转换为Canvas坐标
        //传入参数:窗口坐标(x,y)
        function windowToCanvas(x,y){
            //获取canvas元素的边距对象
            var bbox = canvas.getBoundingClientRect();
            //返回一个坐标对象
            //类似json的一种写法
            return {
                    x : x - bbox.left*(canvas.width/bbox.width),
                    y : y - bbox.top*(canvas.height/bbox.height)
                };
        }
        //保存当前绘图表面数据
        function saveDrawingSurface(){
          //从上下文中获取绘图表面数据
          drawingSurfaceImageData = http://www.mamicode.com/context.getImageData(0,0,canvas.width,canvas.height);>


Canvas---Canvas版画图、虚线、辅助线、线条颜色、线条宽度,整合加强版