实现的效果参见我之前的OpenGL实现的效果,不过这里的坐标系原点在左上角(懒得改Orz...)。然后这里的是纯HTML+JavaScript实现的,在setScreen()函数里写过程就OK了0.0,setpixel的第三个参数是一个整数作为RGB,其余的你懂0.0  不过算法代码要稍微更改成JS的语法0.0   贴代码,直接保存到文件运行即可:

Canvas.html:

<!--
        Author: SpringHack - springhack@live.cn
        Last modified: 2016-04-05 12:53:18
        Filename: Canvas.html
        Description: Created by SpringHack using vim automatically.
-->
<!DOCTYPE html>
<html xmlns="https://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
		<title>Canvas</title>
		<script language='javascript' src='js/canvas.js'></script>
		<script language='javascript' src='js/main.js'></script>
	</head>
	<body>
		<center>
			<canvas id='canvas'></canvas>
		</center>
	</body>
</html>
js/canvas.js, 我实现的兼容库:

/**
        Author: SpringHack - springhack@live.cn
        Last modified: 2016-04-05 12:46:00
        Filename: canvas.js
        Description: Created by SpringHack using vim automatically.
**/

//Config part
var Config = {
		width	:	500,
		height	:	500
	};

//Define colors
var WHITE	=	0xffffff,
	BLACK	=	0x000000,
	GREEN	=	0x00ff00,
	BLUE	=	0x0000ff,
	RED		=	0xff0000,
	ORANGE	=	0xee7600,
	PINK	=	0xee00ee;

//Define default function
function setScreen () {};


//Define main functions
(function (window, undefined) {

 	window.onload = function () {

	 	var buffer = [];
		var canvas = document.getElementById('canvas');
		canvas.width = Config.width;
		canvas.height = Config.height;

		var context = canvas.getContext('2d');


		var getRGB = function (c) {
			var str = '#';
			var cc = [];
			cc[0] = ((c & 0xFF0000) >> 16).toString(16);
			cc[1] = ((c & 0xFF00) >> 8).toString(16);
			cc[2] = (c & 0xFF).toString(16);
			for (var i=0;i<3;++i)
			{
				if (cc[i].length == 1)
					cc[i] = '0' + cc[i];
				str += cc[i];
			}
			return str;
		};

		window.putpixel = function (x, y, c) {
			if (!buffer[x])
				buffer[x] = [];
			buffer[x][y] = c;
			context.beginPath();
			context.moveTo(x, y);
			context.strokeStyle = getRGB(c);
			context.lineTo(x + 1, y + 1);
			context.stroke();
		};

		window.getpixel = function (x, y) {
			if (buffer[x][y])
				return buffer[x][y];
			return 0xffffff;
		};

		setScreen();

	};

})(window);
js/main.js, 主要的代码实现,改这个就OK了0.0:

/**
        Author: SpringHack - springhack@live.cn
        Last modified: 2016-04-05 12:40:06
        Filename: main.js
        Description: Created by SpringHack using vim automatically.
**/


//直线生成算法
function DDALine (x0,y0,x1,y1,color)
{
    var x;
    var dx, dy, y, k;
    dx = x1 - x0,  dy = y1 - y0;
    k = dy/dx, y = y0;
    for (x=x0;x<=x1;x++)
    {
        putpixel (x, parseInt(y+0.5), color);
        y = y + k;
    }
}

function MidpointLine (x0,y0,x1, y1,color)
{
    var a, b, d1, d2, d, x, y;
    a = y0 - y1, b = x1 - x0, d = 2 * a + b;
    d1 = 2 * a, d2 = 2 * (a + b);
    x = x0, y = y0;
    putpixel(x, y, color);
    while (x<x1)
    {
        if (d<0)
        {
            x++, y++, d += d2;
        } else {
            x++, d+=d1;
        }
        putpixel(x, y, color);
    }
}

function Bresenhamline(x0,y0,x1, y1,color)
{
   	var x, y, dx, dy;
    var k, e;
    dx = x1 - x0, dy = y1 - y0, k = dy/dx;
    e = -0.5, x = x0, y = y0;
    for (i=0;i<=dx;++i)
    {
        putpixel(x, y, color);
        x = x + 1;
        e = e + k;
        if (e>=0)
        {
            y++, e = e - 1;
        }
    }
}


//圆生成算法
function CirclePoints(xx, yy, x, y, color)
{
    putpixel(xx + x, yy + y, color);
    putpixel(xx + y, yy + x, color);
    putpixel(xx - x, yy + y, color);
    putpixel(xx + y, yy - x, color);
    putpixel(xx + x, yy - y, color);
    putpixel(xx - y, yy + x, color);
    putpixel(xx - x, yy - y, color);
    putpixel(xx - y, yy - x, color);
}

function MidPointCircle(xx, yy, r, color)
{
    var x, y;
    var d;
    x = 0;
    y = r;
    d = 1.25 - r;
    CirclePoints(xx, yy, x, y, color); //��示圆弧上的八个对称点
    while(x <= y)
    {
        if(d<0)
            d += 2 * x + 3;
        else{
            d += 2 * (x - y) + 5;
            y--;
        }
        x++;
        CirclePoints(xx, yy, x, y, color);
    }
}


//区域填充算法
function FloodFill4(x, y, oldcolor, newcolor)
{
    if(getpixel(x,y) == oldcolor)
    {
        putpixel(x, y, newcolor);
        FloodFill4(x, y + 1, oldcolor, newcolor);
        FloodFill4(x, y - 1, oldcolor, newcolor);
        FloodFill4(x - 1, y, oldcolor, newcolor);
        FloodFill4(x + 1, y, oldcolor, newcolor);
    }
}


//程序入口函数
function setScreen()
{
    //画直线
    DDALine(0, 0, 100, 100, BLUE);
    MidpointLine(100, 100, 200, 200, RED);
    Bresenhamline(200, 200, 300, 300, BLACK);
    
    //画圆
    MidPointCircle(150, 150, 70, GREEN);
    
    //区域填充 - 1
    MidPointCircle(220, 50, 40, PINK);
    FloodFill4(220, 50, WHITE, PINK);
    
    //区域填充 - 2
    FloodFill4(150, 160, WHITE, ORANGE);
}
打包下载地址:https://pan.baidu.com/s/1skNRSSX