canvas 绘点图

项目中需要一个记录点实时变动的信息,在此记录一下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="http://cdn.bootcss.com/jquery/3.0.0-beta1/jquery.min.js"></script>
</head> <body>
<canvas id="myCanvas2" class="pointCanvas" width="950" height="650"></canvas>
<canvas id="myCanvas" class="pointCanvas" width="950" height="650"></canvas>
<script type="text/javascript">
var data1 = {
"code": 0,
"msg": "Get complete!",
"data": {
"d3:35:c5:e7:62:27": [369.92, 425.31],
"20:29:73:d7:09:37": [575.07, 192.57],
}
}
jQuery(function() {
$.fn.extend({ // 将可选择的变量传递给方法
runingPoint: function(options) {
return this.each(function() {
var __this = this;
// console.log($(this));
var runingPoint = {
// 参数配置
options: {
// c: $(__this),
radius: 10,
url: null,
imgUrl: null,
points: [],
selectedCircle: null,
hoveredCircle: null
}, // 初始化方法
init: function(config) {
var _this = this,
o = this.options;
$.extend(true, _this.options, config);
console.log(_this.options);
// 第一次执行
_this.getData();
_this.eventsFn(); // 每5秒执行一次
setInterval(function() {
o.hoveredCircle = undefined;
_this.getData();
}, 5000); // 测试数据 start
// setInterval(function(){ // var arrData = [];
// var D = data1.data;
// o.hoveredCircle = undefined;
// for(var i in D){
// arrData.push({x:D[i][0],y:D[i][1],name:i})
// }
// // console.log('init',arrData); // _this.drawFn(arrData);
// }, 5000);//测试数据 end }, // 获取数据
getData: function() {
var _this = this,
o = this.options;
var arrData = [];
$.getJSON(o.url, function(data) {
// console.log('getData',data);
if (data.code == 0) {
var D = data.data;
for (var i in D) {
arrData.push({
x: D[i][0],
y: D[i][1],
name: i
})
}
// 调用绘图方法
_this.drawFn(arrData); }
});
}, //清除canvas
clear: function() {
var _this = this,
o = this.options;
var ctx = __this.getContext("2d");
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
}, // 获取点的信息
getPointInfoFn: function(p) {
var _this = this,
o = this.options; console.log('getPointInfoFn', JSON.stringify(p)); // $.getJSON('/path/to/file', {param1: 'value1'}, function(json, textStatus) { // });
}, // 事件绑定
eventsFn: function() {
var _this = this,
o = this.options;
// 红点click事件
$(__this).on('click', function(e) {
var e = window.event || e
var rect = this.getBoundingClientRect();
var mouseX = e.clientX - rect.left; //获取鼠标在canvsa中的坐标
var mouseY = e.clientY - rect.top; o.hoveredCircle = undefined;
for (var i = 0; i < o.points.length; i++) { // 检查每一个圆,看鼠标是否滑过
var circleX = o.points[i].x;
var circleY = o.points[i].y;
var radius = o.radius;
if (Math.pow(mouseX - circleX, 2) + Math.pow(mouseY - circleY, 2) < Math.pow(radius, 2)) {
o.hoveredCircle = i;
// console.log('click',o.points[i]);
// 获取点信息
_this.getPointInfoFn(o.points[i]);
//点击放大
_this.drawFn(o.points);
break;
}
}
}); }, // 绘图方法
drawFn: function(data) {
var _this = this,
o = this.options;
var D = data;
var ctx = __this.getContext("2d");
var img = document.createElement('img');
img.src = o.imgUrl;
o.points = [];
_this.clear();
if(!o.imgUrl){
drawPointFn();
return;
}
img.onload = function() {
drawPointFn();
}
function drawPointFn(){
ctx.drawImage(img, 0, 0);
ctx.fillStyle = "#FF0000";
// console.log(D);
for (var i in D) {
// 记录点的数据
o.points.push({
x: D[i].x,
y: D[i].y,
name: D[i].name
}); ctx.beginPath();
ctx.arc(D[i].x, D[i].y, i == o.hoveredCircle ? o.radius * 1.5 : o.radius, 0, Math.PI * 2, true); //Math.PI*2是JS计算方法,是圆
ctx.closePath();
ctx.fill();
}
}
} }; // runingPoint End
console.log(options)
runingPoint.init(options); });
}
}); //extend end // 初始化
$(".pointCanvas").runingPoint({
radius: 10,
imgUrl: './img/img.jpg',
url: 'data.json'
}); })
</script>
</body> </html>

下载demo:http://pan.baidu.com/s/1jHjeHRw

canvas 绘点图的更多相关文章

  1. 第166天:canvas绘制饼状图动画

    canvas绘制饼状图动画 1.HTML <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  2. canvas绘制饼型图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. [canvas]用canvas绘制饼状图

    折线图之后又来饼状图啦~\(≧▽≦)/~啦啦啦 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  4. HTML5 Canvas绘文本动画(使用CSS自定义字体)

    一.HTML代码: <!DOCTYPE html> <html> <head> <title>Matrix Text - HTML5 Canvas De ...

  5. canvas 绘圆加边框

    HTML5中canvas元素,绘制圆形需要使用路径,开始时要取得图形上下文,首先使用路径来勾勒图形的轮廓,然后设置颜色,进行绘制. arc(cx,cy,radius,start_angle,end_a ...

  6. 使用canvas绘制饼状图

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

  7. canvas绘制中的API

    canvas绘制Z 先贴代码吧: /** * Created by Administrator on 2016/1/26. */ var i; function draw (id){ var canv ...

  8. HTML5 Canvas JavaScript库 Fabric.js 使用经验

    首先,表明我的态度:采用 Flash 才是最优方案,不建议使用 HTML 5 的 Canvas 做一些生产/工业级的网页应用. Flash的优势一是浏览器支持好,二是代码成熟稳定.而HTML5 的 C ...

  9. canvas二三事之签名板与视频绘制

    今天,不知道怎么的就点开了语雀,然后就看到了<HTML5 Canvas 教程>,开始了canvas的研究(学习)之旅. 首先,想到的第一个东西就是签名板,上代码: <canvas i ...

随机推荐

  1. 倒数计数器-CountDownLatch

    最近写一个多线程程序,老是MAIN方法执行完了子线程还没执行完(不知道以前怎么玩儿的),得不到最终结果,于是找到了CountDownLatch CountDownLatch是一个同步辅助类,java. ...

  2. sublime自己常用到的设置

    一.快捷“在浏览器打开” 在首选项->按键绑定-用户中添加代码: { "keys": ["f12"], "command": &quo ...

  3. IIS 之 打开/关闭 Internet 信息服务

    由于建立测试网站测试代码,重装电脑后不知道IIS在哪打开.下面以windows7为例介绍,打开IIS管理器的简要步骤. 第一步.查找IIS 1.点击" 开始 "→" 控制 ...

  4. Jquery 扩展方法

    $.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效. 如扩展$.fn.abc() 那么你可以这样子:$("#div").abc(); 通常使 ...

  5. C小加 之 随机数

    描述ACM队的“C小加”同学想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(0<N≤100),对于其中重复的数字,只保留一个,把其余相 ...

  6. solr--搜索参数随笔

    1.默认搜索域.查询域的关系 qf字段的配置:query fields,指定solr从哪些field中搜索 在solrj中设置如下: params.setParam("qf", & ...

  7. 5. Android框架和工具之 ZXing(二维码)

    Android进阶笔记06:Android 实现扫描二维码实现网页登录

  8. 跨域iframe高度自适应(兼容IE/FF/OP/Chrome)

    采用JavaScript来控制iframe元素的高度是iframe高度自适应的关键,同时由于JavaScript对不同域名下权限的控制,引发出同域.跨域两种情况. 由于客户端js使用浏览器的同源安全策 ...

  9. Netty4 自定义Decoder,Encoder进行对象传递

    首先我们必须知道Tcp粘包和拆包的,TCP是个“流”协议,所谓流,就是没有界限的一串数据,TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际数据进行包的划分,一个完整的包可能会被拆分 ...

  10. 一.CSS工作原理

    CSS全称层叠样式表,它是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.是能够真正做到网页表现与内容分离的一种样式设计语言,能够对网页 ...