<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>迷你图</title>
<script src="./js/jquery-3.3.22.js"></script>
<style lang="">
.sparkline{
background: #dddddd;
color: red;
}
</style>
</head>
<body>
<!-- <span class="sparkline">3 5 7 6 6 9 11 15</span> -->
<!-- this is a red square: <canvas id="square" width=10 height=10></canvas> -->
<!-- this is a blue circle: <canvas id="circle" width=10 height=10></canvas> -->
<canvas id="myCanvas" width=1000 height=500></canvas>
</body>
<script>
/**
迷你图
*/
// function onLoad(f) {
// if (onLoad.loaded)
// window.setTimeout(f,0);
// else if (window.addEventListener)
// window.addEventListener("load", f, false);
// else if (window.attachEvent)
// window.attachEvent("onload", f);
// }
// onLoad.loaded = false;
// onLoad(function() {
// onLoad.loaded = true;
// var elts = document.getElementsByClassName("sparkline");
// main: for(var e = 0; e < elts.length;e++) {
// var elt = elts[e];
// var content = elt.textContent || elt.innerText;
// var content = content.replace(/^\s+|\s+$/g,"");
// var text = content.replace(/#.*$/gm,"");
// text = text.replace(/[\n\r\t\v\f]/g,"");
// var data = text.split(/\s+|\s*,\s*/);
// for(var i = 0;i < data.length; i++){
// data[i] = Number(data[i]);
// if (isNaN(data[i])) continue main;
// }
// var style = getComputedStyle(elt,null);
// var color = style.color;
// var height = parseInt(elt.getAttribute("data-height")) || parseInt(style.fontSize) || 20;
// var width = parseInt(elt.getAttribute("data-width")) || data.length * (parseInt(elt.getAttribute("data-dx")) || height/6);
// var ymin = parseInt(elt.getAttribute("data-ymin")) || Math.min.apply(Math, data);
// var ymax = parseInt(elt.getAttribute("data-ymax")) || Math.max.apply(Math, data);
// if(ymin >= ymax) ymax = ymin + 1;
// var canvas = document.createElement("canvas");
// canvas.width = width;
// canvas.height = height;
// canvas.title = content;
// elt.innerHTML = "";
// elt.appendChild(canvas);
// var context = canvas.getContext('2d');
// for(var i = 0;i < data.length; i++) {
// var x = width*i/data.lenth;
// var y = (ymax-data[i])*height/(ymax-ymin);
// context.lineTo(x,y);
// }
// context.strokeStyle = color;
// context.stroke();
// }
// })
/**
红色正方形和蓝色圆
*/
// var canvas = document.getElementById("square");
// var context = canvas.getContext("2d");
// context.fillStyle = "#f00";
// context.fillRect(0,0,10,10);
// canvas = document.getElementById("circle");
// context = canvas.getContext("2d");
// context.beginPath();
// context.arc(5,5,5,0,2*Math.PI,true);
// context.fillStyle = "#00f";
// context.fill();
/**
*绘制线段和填充多边形
*/
// var canvas = document.getElementById("myCanvas");
// var c = canvas.getContext('2d');
// c.beginPath();
// c.moveTo(100,100);
// c.lineTo(200,200);
// c.lineTo(100,200);
// c.moveTo(300,100);
// c.lineTo(300,200);
// // c.fill();
// // c.stroke();
// // c.closePath();
// function polygon(c,n,x,y,r,angle,counterclockwise) {
// angle = angle || 0;
// counterclockwise = counterclockwise || false;
// c.moveTo(x + r*Math.sin(angle), y - r*Math.cos(angle));
// var delta = 2*Math.PI/n;
// for(var i = 1; i < n; i++) {
// angle += counterclockwise?-delta:delta;
// c.lineTo(x + r*Math.sin(angle), y - r*Math.cos(angle));
// }
// c.closePath();
// }
// c.beginPath();
// // 三角形
// polygon(c, 3, 50, 70, 50);
// // 正方形
// polygon(c, 4, 150, 60, 50, Math.PI/4);
// //五边形
// polygon(c, 5, 255, 55, 50);
// // 六边形
// polygon(c, 6, 365, 53, 50, Math.PI/6);
// // 六边形中的小正方形
// polygon(c, 4, 365, 53, 20, Math.PI/4, true);
// c.fillStyle = "#ccc";
// c.strokeStyle = "#008";
// c.lineWidth = 5;
// c.fill();
// c.stroke();
/**
*科赫雪花
*/
// var deg = Math.PI/180;
// function snowflake(c, n, x, y, len) {
// c.save();
// c.translate(x,y);
// c.moveTo(0,0);
// leg(n);
// c.rotate(-120*deg);
// leg(n);
// c.rotate(-120*deg);
// leg(n);
// c.closePath();
// c.restore();
// function leg(n) {
// c.save();
// if(n == 0) {
// c.lineTo(len, 0);
// }
// else{
// c.scale(1/3,1/3);
// leg(n-1);
// c.rotate(60*deg);
// leg(n-1);
// c.rotate(-120*deg);
// leg(n-1);
// c.rotate(60*deg);
// leg(n-1);
// }
// c.restore();
// c.translate(len,0)
// }
// }
// snowflake(c,0,5,115,125);
// snowflake(c,1,145,115,125);
// snowflake(c,2,285,115,125);
// snowflake(c,3,425,115,125);
// snowflake(c,4,565,115,125);
// c.stroke();
/**
*在路径中添加曲线
*/
/**
*角度制转换为弧度制工具
*/
// function rads(x) {
// return Math.PI*x/180;
// }
// c.beginPath();
// // 圆
// c.arc(75,100,50,0,rads(360),false);
// c.moveTo(200,100);
// // 楔
// c.arc(200,100,50,rads(-60),rads(0),false);
// c.closePath();
// // 不同方向的楔
// c.moveTo(325, 100);
// c.arc(325,100,50,rads(-60),rads(0),true);
// c.closePath();
// // 圆角
// c.moveTo(450, 50);
// c.arcTo(500,50,500,150,30);
// c.arcTo(500,150,400,150,20);
// c.arcTo(400,150,400,50,10);
// c.arcTo(400,50,500,50,0);
// c.closePath();
// // 二次贝塞尔曲线:一个控制点
// c.moveTo(75, 250);
// c.quadraticCurveTo(100,200,175,250);
// c.fillRect(100-3,200-3,6,6);
// // 三次贝塞尔曲线
// c.moveTo(200,250);
// c.bezierCurveTo(220,220,280,280,300,250);
// c.fillRect(220-3,220-3,6,6);
// c.fillRect(280-3,280-3,6,6);
// c.fillStyle = "#ccc";
// c.strokeStyle = "#008";
// c.lineWidth = 5;
// c.fill();
// c.stroke();
// 图形状态管理工具
// 恢复最后一次保存的图形状态,但是让该状态从栈中弹出
CanvasRenderingContext2D.prototype.revert = function() {
this.restore(); //回复最后一次保存的图形状态
this.save(); //再次保存它以便后续使用
return this; //允许方法链
};
// 通过o对象的属性来设置图形属性
// 或者,如果没有提供参数,就以对象的方式返回当前属性
// 要注意是,他不处理变换和裁剪区域
CanvasRenderingContext2D.prototype.attrs = function(o) {
if(o) {
for(var a in o)
this[a] = o[a];
return this;
}
else return {
fillStyle: this.fillStyle, font: this.font,
globalAlpha: this.globalAlpha,
globalCompositeOperation: this.globalCompositeOperation,
lineCap: this.lineCap, lineJoin: this.lineJoin,
lineWidth: this.lineWidth, miterLimit: this.miterLimit,
textAlign: this.textAlign,textBaseline: this.textBaseline,
shadowBlur:this.shaowBlur,shadowColor:this.shadowColor,
shadowOffsetX: this.shadowOffsetX, shadowOffsetY: this.shadowOffsetY,
strokeStyle:this.strokeStyle
}
}
</script>
</html>