如何使用HTML5 Canvas动态的绘制拓扑图
发布网友
发布时间:2022-04-22 14:39
我来回答
共1个回答
热心网友
时间:2022-04-06 07:13
//需要自己引入jQuery
<!DOCTYPE html><html><head>
<script type="text/javascript" src="jquery-3.0.0.js"></script>
<script type="text/javascript">
//是否可以进行直线标记
var flag = false;
//是否可以进行圆圈标记
var flag1 = false;
//是否可以进行文字标记
var flag2 = false;
//标记的开始坐标
var x1 = -10000;
var y1 = -10000;
//标记的结束坐标
var x2 = -10000;
var y2 = -10000;
//查找所有图片,动态创建画布
function newCanvas (){
//查找所有图片,并且生成画布
$("#body").find("img").each(function(i,e){
//获取图片长度宽度
var imgWidth = $(this).attr("width");
var imgHeight = $(this).attr("height");
//根据图片动态创建画布
var canvas = document.createElement("canvas");
canvas.width = imgWidth;
canvas.height = imgHeight;
canvas.id = "canvas"+i;
$(canvas).css("border", "1px solid #d3d3d3");
document.getElementById("myCan").appendChild(canvas);
//获取画布
var c=document.getElementById("canvas"+i);
var ctx=c.getContext("2d");
//给画布绘制图片
var imgId = $(this).attr("id");
var img=document.getElementById(imgId);
$(img).ready(function() {
ctx.drawImage(img,0,0,imgWidth,imgHeight);
});
});
}
//动态清空所有画布
function clearCanvas (){
//查找所有图片,并且清空画布
$("#body").find("img").each(function(i,e){
//获取图片长度宽度
var imgWidth = $(this).attr("width");
var imgHeight = $(this).attr("height");
//获取图片元素
var img = e;
//查找所有画布
$("#body").find("canvas").each(function(i,e){
//获取画布
var c= e;
var ctx=c.getContext("2d");
//绘制一个纯白色画布
ctx.clearRect(0,0,imgWidth,imgHeight);
//重新将原图片加入到画布中
ctx.drawImage(img,0,0,imgWidth,imgHeight);
});
});
}
//动态获取所有画布的Base64压缩数据
function copyCanvas (){
//查找所有画布
$("#body").find("canvas").each(function(i,e){
var canvas = e;
var dataURL = canvas.toDataURL();
var b64 = dataURL.substring( 22 );
console.log(b64);
console.log("**********************************************");
});
}
$(document).ready(function(){
//查找所有图片,动态创建画布
newCanvas();
//标记按钮
$("#mark").click(function(){
flag = true;
});
//圆圈按钮
$("#circle").click(function(){
flag1 = true;
});
//清空按钮
$("#clear").click(function(){
//动态清空所有画布
clearCanvas();
});
//字体按钮
$("#writeFont").click(function(){
flag2 = true;
});
//获取base64压缩数据
$("#getData").click(function(){
//动态获取所有画布的Base64压缩数据
copyCanvas ();
});
//给页面所有画布设置点击事件
$(document).find("canvas").each(function(i){
$(this).bind("click", mouseMove);
});
//画布绘制标记
function mouseMove(event){
var id = $(this).attr("id");
var c=document.getElementById(id);
var ctx=c.getContext("2d");
//如果激活了直线标记按钮
if(flag){
//获取点击位置的相对坐标
var coord = getXAndY(event,$(this));
var x = coord.x;
var y = coord.y;
if(x1==-10000&&y1==-10000){
//还未进行选择开始位置的坐标
x1 = x;
y1 = y;
}else if (x2==-10000&&y2==-10000){
//还未进行选择结束位置的坐标
x2 = x;
y2 = y;
//绘制标记
//必须开启beginPath,否则可能会出现之前绘制过的线条
ctx.beginPath();
ctx.moveTo(x1,y1);
ctx.lineTo(x2,y2);
ctx.stroke();
//必须释放closePath
ctx.closePath();
//初始化
flag = false;
x1 = -10000;
y1 = -10000;
x2 = -10000;
y2 = -10000;
}else{
alert("浏览器异常,请按F5刷新页面重新标记!");
}
}else{
//alert("请先点击标记按钮再进行标记!");
}
//如果激活了圆圈按钮
if(flag1){
//获取点击位置的相对坐标
var coord = getXAndY(event,$(this));
var x = coord.x;
var y = coord.y;
//绘制圆圈标记
ctx.beginPath();
ctx.arc(x,y,10,0,2*Math.PI);
ctx.stroke();
//初始化
flag1 = false ;
}
//如果激活了文字标记按钮
if(flag2){
//获取点击位置的相对坐标
var coord = getXAndY(event,$(this));
var x = coord.x;
var y = coord.y;
var user = window.prompt("请输入标记内容","");
//确定
if(user){
//绘制文字标记
ctx.font="16px Arial";
ctx.fillText(user,x,y);
}
//初始化
flag2 = false;
}
}
//获取鼠标点击画布区域中的相对位置坐标
function getXAndY(event,clickDom){
//鼠标点击的绝对位置
Ev= event || window.event;
var mousePos = mouseCoords(event);
var x = mousePos.x;
var y = mousePos.y;
//alert("鼠标点击的绝对位置坐标:"+x+","+y);
//获取canvas画布在body中的绝对位置
var x1 = $(clickDom).offset().left;
var y1 = $(clickDom).offset().top;
//alert("画布在body中的绝对位置坐标:"+x1+","+y1);
//鼠标点击位置的相对于canvas画布的坐标
var x2 = x - x1;
var y2 = y - y1;
//alert("画布在body中的相对位置坐标:"+x2+","+y2);
return {x:x2,y:y2};
}
//获取鼠标点击画布区域中的绝对位置坐标
function mouseCoords(event){
if(event.pageX || event.pageY){
return {x:event.pageX, y:event.pageY};
}
return{
x:event.clientX + document.body.scrollLeft - document.body.clientLeft,
y:event.clientY + document.body.scrollTop - document.body.clientTop
};
}
});
</script></head><body id="body">
<div id="myCan">
<p>Image to use:</p>
<img id="scream" src="test.jpg" alt="The Scream" width="200" height="200"/>
<img id="scream1" src="test.jpg" alt="The Scream" width="200" height="200"/>
<p>Canvas:</p>
</div>
<input id="mark" type="button" value="标记" />
<input id="circle" type="button" value="圈记" />
<input id="writeFont" type="button" value="文字" />
<input id="clear" type="button" value="清空" />
<input id="getData" type="button" value="图片生成Base64压缩数据" /></body></html>
如何使用HTML5 Canvas动态的绘制拓扑图
你可以直接在该对象上指定宽度和高度,但是,其大多数功能都可以通过CanvasRenderingContext2D 对象获得。 这是通过 Canvas 对象的getContext() 方法并且把直接量字符串 "2d" 作为唯一的参数传递给它而获得的。<canvas> 标记在 Safari 1.3 中引入,在制作此参考页时,它在 Firefox 1.5 和 Opera 9 ...
非结构化数据如何可视化呈现?
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准...
如何在html5的canvas绘制地图
canvas.onmouseup=null;canvas.style.cursor="default";} } function windowToCanvas(canvas,x,y){ var bbox = canvas.getBoundingClientRect();return { x:x - bbox.left - (bbox.width - canvas.width) / 2,y:y - bbox.top - (bbox.height - canvas.height) / 2 };} 图片缩放 ...
HTML5如何通过canvas,把两张图片绘制到画布,然后导出大图
<img src="..." id="img1" /><img src="..." id="img2" /><img id="img3" />var img1 = document.getElementById("img1"), img2 = document.getElementById("img2"), img3 = document.getElementById("img3");var canvas = document.createElement("canvas"), cont...
canvas动态绘制轨迹?
第一个参数image可以用HTMLImageElement,HTMLCanvasElement或者HTMLVideoElement作为参数。dx、dy是image在canvas中定位的坐标值;dw、dh是image在canvas中即将绘制区域(相对dx和dy坐标的偏移量)的宽度和高度值;sx、sy是image所要绘制的起始位置;sw、sh是image所要绘制区域(相对image的敏腔sx和sy坐标的...
如何用Canvas绘制多种图形(详解)
Canvas的全局设置可以通过栈进行保存和恢复,如移动坐标系后,可以使用save和restore函数在画布上实现复杂操作的切换。此外,Canvas还有更多的高级功能如数据转换和动画制作。总结 Canvas是一个强大的HTML5绘图工具,利用JavaScript进行图形绘制,尤其在性能和兼容性上具有优势。通过熟练掌握其API和坐标系统,开发...
几种关于HTML5的动态效果制作方法
3.GIF首先第一个就是我们的 gif 图片,这是一种非常简单,但却高效的动态图制作方式。GIF图片擅长于 制作细节的小动画 ,位图,优势在于 “体型”很小,可压缩,制作成本低,以图片的形态适用于各种操作系统,无兼容性的后顾之忧。制作GIF动画的方式有很多,例如我们所熟悉的Photoshop时间轴,或是利...
如何用Canvas绘制多种图形
Canvas 则是直接使用 JavaScript 来进行绘图,对 Mac 友好,所以不失为 Flash 的一个继承者。使用Canvas说了这么多,Canvas 究竟是个啥?英文中 Canvas 的意思是“画布”,不过这里说的 Canvas 是 HTML5 中新出的一个元素,开发者可以在上面绘制一系列图形。Canvas 在 HTML 文件中的写法很简单:<canvas id="canvas"...
如何使用HTML5的Canvas图形元素绘制图形
1、canvas绘制矩形 <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title>canvas绘制矩形</title> <script type="text/javascript" src="canvas2.js"></script> <style type="text/css"> body { margin: 0; padding: 0; } </style></he...
HTML5canvas绘制音频、音乐可视化
canvas图形绘制首先我们得到AnalyserNode.frequencyBinCount,即可视化数据值,然后将其存为Uint8Array数组类型,constAudioBufferSourceNode=AC.createBufferSource();//这里创建了个音频源AudioBufferSourceNode.start([when[,offset[,duration]]);//安排声音在指定时间播放。没有指定时间,则声音立即开始播放。
html5的canvas绘制了个房间结构图,鼠标移动到哪个房间,哪个房间填充...
代码如下,直接复制那段JS去用就可以了。over是进入区域的事件,out是离开区域的事件。<!DOCTYPE html><html><head> <meta charset="utf-8"> </head><body><canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;">您的浏览器不支持 HTML5 canvas 标签。</...