html5添加随机率,HTML5 canvas 绘制随机曲线 并实现放大功能
正在开发一个无线监控系统,要显示频率波形图,所以最近一段时间再研究HTML5 canvas
标签,本例实现了根基传经来的数据绘制曲线,并对整个图实行局部放大功能。
js代码(canvas_06.js):
var canvas = null;
var canvasline = null;
var stationCanvas = null;
var ctx = null;
var linectx = null;
var stationCtx = null;
var width = 0; //canvas 的宽
var height = 0;//canvas 的高
var xMin = 0; //X轴的最小标记坐标
var xMax = 0; //X轴的最大标记坐标
var xPx = 0; //X轴的像素
var yMax = 0; //Y轴的最大标记坐标
var yMin = 0; //Y轴的最小标记坐标
var yPx = 0; //Y轴的像素
var vMax = 108;//标注最大值
var vMin = 88;//标注最小值
var downx = 0;
var downy = 0;
var upx = 0;
var upy = 0;
var setp = 0;//画线的步长
var ana = 5; //将X 分成几份
var border = 20; // 外边框
var vSetp = 0;
var json = null;
var index = 0;
var indexEnd = 0;
var length = 0;
window.onload = function(){
json =
[{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},
{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},
{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},
{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},
{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},{y:100},{y:200},
];
length = json.length;
indexEnd = length-1;
canvas = document.getElementByIdx_x("background");
canvasline = document.getElementByIdx_x("line");
stationCanvas = document.getElementByIdx_x("station");
width = canvas.width;
height = canvas.height;
yMin = 20;
yMax = height-border;
yPx = yMax - yMin;
xMax = width - border;
xMin = 20;
xPx = xMax - xMin;
setp = xPx/ana;
ctx = canvas.getContext("2d");
linectx = canvasline.getContext("2d");
stationCtx = stationCanvas.getContext("2d");
set(vMax,vMin);
for(var i = 0; i<=200;i++){
}
};
function set(vmax,vmin){//重置 vMax 和 vMin
vMax = vmax;
vMin = vmin;
vSetp = (vMax - vMin)/ana;
draw();
drawStation();
drawLine();
}
function drawStation(){
var div = document.getElementByIdx_x("div");
div.onmousedown = function (ev){
stationCtx.save();
downx = ev.clientX-7;
downy = ev.clientY;
stationCtx.strokeStyle = "red";
stationCtx.beginPath();
stationCtx.moveTo(downx,yMin);
stationCtx.lineTo(downx,yMax);
stationCtx.closePath();
stationCtx.stroke();
stationCtx.restore();
};
div.onmouseup = function (ev){
stationCtx.save();
upx = ev.clientX-7;
upy = ev.clientY;
stationCtx.strokeStyle = "red";
stationCtx.beginPath();
stationCtx.moveTo(upx,yMin);
stationCtx.lineTo(upx,yMax);
stationCtx.closePath();
stationCtx.stroke();
stationCtx.restore();
if (upx == downx) {
return;
}else if (upx > downx) {
amplification(downx,upx);
}else {
reduce(downx,upx);
}
};
}
function drawLine(){
linectx.clearRect(0,0,width,height);
stationCtx.clearRect(0,0,width,height);
linectx.save();
linectx.strokeStyle = "white";
linectx.beginPath();
var a = 0;
for (var i = index; i <= indexEnd;i++ ) {
var x1 = a*(xMax - xMin)/(indexEnd -index) +border;
var x2 = (a+1)*(xMax - xMin)/(indexEnd -index)+border;
linectx.moveTo(x1,json[i].y);
linectx.lineTo(x2,json[i+1].y);
linectx.closePath();
linectx.stroke();
a++;
}
linectx.restore();
}
function draw(){
ctx.fillRect(0,0,width,height);
ctx.save();
ctx.strokeStyle = "white";
ctx.lineWidth = 2;
ctx.strokeRect(border,border,width-border*2,height-border*2);
ctx.restore();
ctx.save();
ctx.strokeStyle = "green";
ctx.beginPath();
for ( var i = 1; i < ana ; i++) {
ctx.moveTo(xMin+setp*i,yMin);
ctx.lineTo(xMin+setp*i,yMax);
}
ctx.closePath();
ctx.fillRect(xMin-1,yMax+1,xMax+20, 10);
for ( var i = 0; i <=ana; i++) {
var value = vMin + vSetp*i;
var x = (value - vMin)*xPx / (vMax - vMin);
ctx.strokeText( value.toFixed(2),x,yMax+10);
}
ctx.stroke();
ctx.restore();
}
function amplification(downx,upx){ //计算变换以后的vMax 和 Vmin
的值
var vmin = (downx - xMin)/((xMax - xMin)/(vMax - vMin)) +
vMin;
var vmax = (upx-xMin)/((xMax - xMin)/(vMax - vMin)) +
vMin;
var i = downx/((xMax - xMin)/length) - 1;
index =parseInt(i);
var ied = upx/((xMax - xMin)/length) - 1;
indexEnd = parseInt(ied);
// alert(indexEnd);
length = indexEnd - index;
set(vmax,vmin);
}
function reduce(downx,upx){
length = json.length;
indexEnd = length-1;
var vmin = 88;
var vmax = 108;
set(vmax,vmin);
}
}
CSS代码(Style.css):
.div{
width: 200px;
height: 300px;
background: red;
}
.boack{
position: absolute;
left: 0px;
top: 0px;
width: 1000px;
height: 400px;
}
HTML代码:
canvas_06.html
http-equiv="keywords"
content="keyword1,keyword2,keyword3">
http-equiv="description" content="this is my
page">
http-equiv="content-type" content="text/html;
charset=UTF-8">
src="js/canvas_06.js">
href="CSS/Style.css"
type="text/css">
height="400">
height="400">
"div">
height="400">
html5添加随机率,HTML5 canvas 绘制随机曲线 并实现放大功能相关推荐
- html5贝塞尔曲线,用canvas绘制一个曲线动画——深入理解贝塞尔曲线
前言 在前端开发中,贝赛尔曲线无处不在: 它可以用来绘制曲线,在svg和canvas中,原生提供的曲线绘制都是使用贝赛尔曲线 它也可以用来描述一个缓动算法,设置css的transition-timin ...
- canvas绘制随机大小颜色泡泡,鼠标单击后变大变淡消失
一.canvas随机渲染泡泡,鼠标单击后变大变淡消失 完整代码如下: <!doctype html> <html lang="en"><head> ...
- Canvas绘制圆滑曲线
canvas 绘制曲线是一个比较容易实现的逻辑,但是对于签名,或者手写板,大屏会议机等设备原生的Canvas.drawPath(); 要求线条曲率完美,直接使用drawPath显然不能满足需求,这方面 ...
- addroutes没添加进去_CAD中如何绘制函数曲线及添加数学公式
如何在CAD中绘制函数曲线?CAD与EXCELL结合,绘制函数曲线相当厉害.本文采用中望CAD软件,举例说明方法: 一.以三角函数y=sinx为例. 1.在A列从0开始以步长0.4(可自行调节)取若干 ...
- HTML5制作坦克大战游戏+Canvas绘制基础图形——学习笔记一
1.离线存储:1)存储到本地,可以离线浏览网页 2)不用cookie(安全性不太高,来回交互的数据量比较大) 2.语音识别 3.图像识别 4.HTML5游戏 5.CSS3的强大之处:动画和各种选择器 ...
- html5基础入门教程之canvas绘制图形
moveTo(x,y) moveTo()方法用于定位绘画的位置,即将点移动到参数x,y所指定的坐标位置. canvas初始化或者调用了beginPath()方法时,绘画开始的位置即原点(0,0),使用 ...
- Android 图标上面添加提醒(一)使用Canvas绘制
在我们开发一些如通讯录.社交等应用或者应用添加新功能模块时,会考虑在对应的图标上加上未读信息的数量,或者是新功能提醒的图标,这样不占太大空间还能达到提示的目的. 之前在MMS分析部分,也有人问过我这种 ...
- html5添加新标签,HTML5新添加的标签及用
HTML5和HTML其实是很类似的,但是有些内容有发生了改变,今天我学习了一下HTML5发现还是挺好学的,只需有html+css基础即可以,今天知识看了下新的标签. 一.定义文档类型 在文件的开头总是 ...
- html贝塞尔曲线在线,使用canvas绘制贝塞尔曲线
1.二次贝塞尔曲线 quadraticCurveTo(cpx,cpy,x,y) //cpx,cpy表示控制点的坐标,x,y表示终点坐标: 数学公式表示如下: 二次方贝兹曲线的路径由给定点P0.P1.P ...
最新文章
- bootstrap解析-栅格系统
- java,php,asp,asp.net,ror等几种Web技术对比(第一版本)
- Stream从Python切换到Go的原因
- 【华为云技术分享】昇腾AI处理器软件栈--总览
- 推荐一款思维在线思维导图,为什么?
- 高并发系统数据幂等性
- java 象限分析_用四种象限分析你(未来的人生走向)
- mysql二进制增量备份
- 极速火箭网络助手怎么用_在检测火箭队方面,神经网络比灰烬更好吗? 如果是这样,如何?...
- Centos重置root密码
- BottomNavigationView--基本使用总结
- linux运行minecraft,如何在DeepinLinux下运行Minecraft光影整合包进行游戏
- 软件设计师2022记录
- toLatin1 toLocal8Bit
- JavaScript 案例综合提升
- 暴风魔镜 光标漂移_如何防止光标在游戏过程中漂移到另一个监视器
- 亚马逊账号关联因素分析防关联技巧
- MySQL入门很简单——读书笔记
- Comparable和Comparator接口
- 外包程序猿的漫漫人生路