正在开发一个无线监控系统,要显示频率波形图,所以最近一段时间再研究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  绘制随机曲线 并实现放大功能相关推荐

  1. html5贝塞尔曲线,用canvas绘制一个曲线动画——深入理解贝塞尔曲线

    前言 在前端开发中,贝赛尔曲线无处不在: 它可以用来绘制曲线,在svg和canvas中,原生提供的曲线绘制都是使用贝赛尔曲线 它也可以用来描述一个缓动算法,设置css的transition-timin ...

  2. canvas绘制随机大小颜色泡泡,鼠标单击后变大变淡消失

    一.canvas随机渲染泡泡,鼠标单击后变大变淡消失 完整代码如下: <!doctype html> <html lang="en"><head> ...

  3. Canvas绘制圆滑曲线

    canvas 绘制曲线是一个比较容易实现的逻辑,但是对于签名,或者手写板,大屏会议机等设备原生的Canvas.drawPath(); 要求线条曲率完美,直接使用drawPath显然不能满足需求,这方面 ...

  4. addroutes没添加进去_CAD中如何绘制函数曲线及添加数学公式

    如何在CAD中绘制函数曲线?CAD与EXCELL结合,绘制函数曲线相当厉害.本文采用中望CAD软件,举例说明方法: 一.以三角函数y=sinx为例. 1.在A列从0开始以步长0.4(可自行调节)取若干 ...

  5. HTML5制作坦克大战游戏+Canvas绘制基础图形——学习笔记一

    1.离线存储:1)存储到本地,可以离线浏览网页  2)不用cookie(安全性不太高,来回交互的数据量比较大) 2.语音识别 3.图像识别 4.HTML5游戏 5.CSS3的强大之处:动画和各种选择器 ...

  6. html5基础入门教程之canvas绘制图形

    moveTo(x,y) moveTo()方法用于定位绘画的位置,即将点移动到参数x,y所指定的坐标位置. canvas初始化或者调用了beginPath()方法时,绘画开始的位置即原点(0,0),使用 ...

  7. Android 图标上面添加提醒(一)使用Canvas绘制

    在我们开发一些如通讯录.社交等应用或者应用添加新功能模块时,会考虑在对应的图标上加上未读信息的数量,或者是新功能提醒的图标,这样不占太大空间还能达到提示的目的. 之前在MMS分析部分,也有人问过我这种 ...

  8. html5添加新标签,HTML5新添加的标签及用

    HTML5和HTML其实是很类似的,但是有些内容有发生了改变,今天我学习了一下HTML5发现还是挺好学的,只需有html+css基础即可以,今天知识看了下新的标签. 一.定义文档类型 在文件的开头总是 ...

  9. html贝塞尔曲线在线,使用canvas绘制贝塞尔曲线

    1.二次贝塞尔曲线 quadraticCurveTo(cpx,cpy,x,y) //cpx,cpy表示控制点的坐标,x,y表示终点坐标: 数学公式表示如下: 二次方贝兹曲线的路径由给定点P0.P1.P ...

最新文章

  1. bootstrap解析-栅格系统
  2. java,php,asp,asp.net,ror等几种Web技术对比(第一版本)
  3. Stream从Python切换到Go的原因
  4. 【华为云技术分享】昇腾AI处理器软件栈--总览
  5. 推荐一款思维在线思维导图,为什么?
  6. 高并发系统数据幂等性
  7. java 象限分析_用四种象限分析你(未来的人生走向)
  8. mysql二进制增量备份
  9. 极速火箭网络助手怎么用_在检测火箭队方面,神经网络比灰烬更好吗? 如果是这样,如何?...
  10. Centos重置root密码
  11. BottomNavigationView--基本使用总结
  12. linux运行minecraft,如何在DeepinLinux下运行Minecraft光影整合包进行游戏
  13. 软件设计师2022记录
  14. toLatin1 toLocal8Bit
  15. JavaScript 案例综合提升
  16. 暴风魔镜 光标漂移_如何防止光标在游戏过程中漂移到另一个监视器
  17. 亚马逊账号关联因素分析防关联技巧
  18. MySQL入门很简单——读书笔记
  19. Comparable和Comparator接口
  20. 外包程序猿的漫漫人生路

热门文章

  1. Apple高规格推3232吋LCD面板XDR
  2. 窗体内元素遍历-通用方法(DevExpress 中BarManager的遍历)
  3. shiro之AuthenticationStrategy
  4. SDUT 贪心算法 删数问题
  5. 使用fliter实现ie下css中rgba的效果
  6. easyui的Pagination单独使用
  7. iOS使用Charles(青花瓷)抓包并篡改返回数据图文详解
  8. FORK()子进程对父进程打开的文件描述符的处理
  9. Linux系统下如何查看已经登录用户
  10. linux 路由跟踪表 nf_conntrack 数据结构 参数 简介