问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用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" 作为唯一的参数传递给它而获得的。&lt;canvas&gt; 标记在 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,把两张图片绘制到画布,然后导出大图

&lt;img src="..." id="img1" /&gt;&lt;img src="..." id="img2" /&gt;&lt;img id="img3" /&gt;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 文件中的写法很简单:&lt;canvas id="canvas"...

如何使用HTML5的Canvas图形元素绘制图形

1、canvas绘制矩形 &lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head lang="en"&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;canvas绘制矩形&lt;/title&gt; &lt;script type="text/javascript" src="canvas2.js"&gt;&lt;/script&gt; &lt;style type="text/css"&gt; body { margin: 0; padding: 0; } &lt;/style&gt;&lt;/he...

HTML5canvas绘制音频、音乐可视化

canvas图形绘制首先我们得到AnalyserNode.frequencyBinCount,即可视化数据值,然后将其存为Uint8Array数组类型,constAudioBufferSourceNode=AC.createBufferSource();//这里创建了个音频源AudioBufferSourceNode.start([when[,offset[,duration]]);//安排声音在指定时间播放。没有指定时间,则声音立即开始播放。

html5的canvas绘制了个房间结构图,鼠标移动到哪个房间,哪个房间填充...

代码如下,直接复制那段JS去用就可以了。over是进入区域的事件,out是离开区域的事件。&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt; &lt;meta charset="utf-8"&gt; &lt;/head&gt;&lt;body&gt;&lt;canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;"&gt;您的浏览器不支持 HTML5 canvas 标签。&lt;/...

绘制人物动态的要点 简述绘制人物动态的要点 扩谱图和拓扑图 应用拓扑图 简单的拓扑图 结构图和拓扑图 拓扑图简图 网络架构图和拓扑图 拓扑图用什么软件好
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在液压原理图中各种符号的表示意义是什么? 脚臭怎么办,一脱鞋,那味道我自己都受不了? ...经电加热后表面会形成一层黑色物质,请问是什么东西?用什么化学... 宿舍老是经常出现蚂蚁,放久的书本打开全是蚂蚁,或是布柜里放久的衣服... 为什么寝室地板上会有蚂蚁? 怎么计算产值excel 青春不再伤感经典句子(《青春伤感经典短句子》) 致我们失去的青春简短说说(怀念过去的经典句子) 分享回忆过去致青春的语录集锦(回忆的句子时光感言简短) 女生为什么总想摸我的脸 怎样繁殖出多的公孔雀鱼 404 Not Found android studio canvas 怎么用 html5 canvas 元素有什么用 孔雀鱼批量繁殖冬天注意事项都哪些?外过滤桶好吗? 如何使用canvas里绘制一个三角形 孔雀鱼怎么能快速让它繁殖 孔雀鱼批量繁殖时应该如何保证避免大鱼吃小鱼? 如何使用html5中的canvas标签,画一个圆及一个矩形 使用canvas绘制“实心”矩形时,使用什么方法,该方法的参数分别代表什么意思 怎样使用canvas绘制一个矩形 如何使用canvas绘制走势图 古诗名称的后面三个字是……林子枫 四系罐是什么样的? 形容杨贵妃的诗词 隋唐青瓷价值多少? 拍卖公司拍卖过的磁州窑四系瓶价格 写杨贵妃美貌的诗句有哪些? 宋朝瓜棱黑釉四系罐真品估价? 懂行的给看看这个四系罐是什么釉和哪个年代的有价值吗 孔雀鱼过量繁殖怎么办? html5必须要用到Canvas吗? 孔雀鱼一年繁殖几次? 怎么给女孩取名字 孔雀鱼多久可以繁殖一次? 使用canvas画图,图形模糊怎么办 孔雀鱼一个月繁殖一次吗? 如何使用Canvas绘制drawText旋转角度 怎样使孔雀鱼繁殖雄性多些 思考什么时候使用Canvas 和SVG 孔雀鱼一年繁殖几次呢? 起名女孩子 如何使用Canvas实时处理Video 怎么让孔雀鱼加速繁殖??? 如何用canvas写字使用规定字体 孔雀鱼要多久才会繁殖一次 自嗨锅火锅哪个口味最好吃 孔雀鱼多久繁殖一次 自嗨锅小鲜肉麻辣火锅 好吃吗? 自嗨锅哪个口味最好吃