如何用canvas畫出一個路線圖(程式碼)
這篇文章帶給大家的內容是關於如何用canvas畫出一個路線圖(程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
<head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <meta content="always" name="referrer"> <meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0" name="viewport" /> <title>CITEK反向寻车</title> <script src="<%=basePath%>wui/js/jquery.js"></script> <link rel="stylesheet" href="<%=cssPath%>wui.css" type="text/css"></link> <script type="text/javascript" src="<%=basePath%>wui/js/line_tool.js"></script> <script type="text/javascript"> var arrPosX = [], arrPosY = []; <s:iterator value="listNode" status="bean"> //设置路线中点的横坐标和纵坐标的集合 arrPosX.push(<s:property value="posX" />); arrPosY.push(<s:property value="posY" />); </s:iterator> var arrRoundPosX = [], arrRoundPosY = []; //设置终点所在区域的范围点横坐标和纵坐标集合 <s:iterator value="positionsX" status="bean"> arrRoundPosX.push(<s:property />); </s:iterator> <s:iterator value="positionsY" status="bean"> arrRoundPosY.push(<s:property />); </s:iterator> var ctxBackground, canvasBackground; var ctxSource, canvasSource; var canvasWidth, canvasHeight; var imgStart, imgEnd, imgBackground,; var areaImage; var isStart = false; var scale = 1; var scaleInterval = 3; var scaleCount = 0; var runCount = 0; var step = 2; //像素 var moveX = 1; var moveY = 1; var currIndex = 0; var a = 0; var tmpIconPaths = [ //设置起点图标 "<%=basePath%>img/point_start.png", ]; var imgObjArr = []; var iLoadIndex = 0; /** * 将图标放入集合中 */ function loadIconImages(){ var oImg = new Image(); oImg.addEventListener('load', eventIconImagesLoaded, false); oImg.src = tmpIconPaths[iLoadIndex]; imgObjArr.push(oImg); } /** * 加载图标 */ function eventIconImagesLoaded(){ iLoadIndex++; if(iLoadIndex <= 3) { loadIconImages(); } else { loadImage(); } } /** * 加载背景图标 */ function loadImage(){ areaImage = new Image(); areaImage.addEventListener('load', eventAreaImageLoaded, false); areaImage.src ="<%=basePath%>image/img.jpg; } function eventAreaImageLoaded(){ initBase(); initScene(); initSprits(); start(); isStart = true; } /** * 初始化 */ function initBase() { imgStart = imgObjArr[0]; canvasBackground = document.getElementById("canvasBackground"); ctxBackground = canvasBackground.getContext("2d"); canvasSource = document.getElementById("canvasSource"); ctxSource = canvasSource.getContext("2d"); canvasWidth = areaImage.width; canvasHeight = areaImage.height; var bodyWidth = document.body.clientWidth-10; var bodyHeight = document.body.clientHeight-10; var tmpCavW = canvasWidth; var tmpCavH = canvasHeight; if(canvasWidth > bodyWidth) { canvasWidth = bodyWidth; canvasHeight = canvasWidth * (tmpCavH/tmpCavW); } if(canvasHeight > bodyHeight){ canvasHeight = bodyHeight; canvasWidth = canvasHeight * (tmpCavW/tmpCavH); } canvasBackground.width = canvasWidth; canvasBackground.height = canvasHeight; canvasSource.width = canvasWidth; canvasSource.height = canvasHeight; moveX = arrPosX[0] * canvasWidth; moveY = arrPosY[0] * canvasHeight; } /** * 初始化画布 */ function initScene() { ctxBackground.drawImage(areaImage, 0, 0, canvasWidth, canvasHeight); } /** * 开始绘图 */ function initSprits() { /* 绘制路线的白底 */ ctxBackground.beginPath(); ctxBackground.strokeStyle = "white"; ctxBackground.lineWidth = 8; ctxBackground.lineCap = "round"; ctxBackground.lineJoin = "miter"; ctxBackground.miterLimit = 30; for(var i=1; i < arrPosX.length; i++){ ctxBackground.moveTo(canvasWidth * arrPosX[i-1], canvasHeight * arrPosY[i-1]); //指定一条线段的起点 ctxBackground.lineTo(canvasWidth * arrPosX[i], canvasHeight * arrPosY[i]); //指定一条线段的终点 } ctxBackground.stroke(); /* 绘制路线的红线 */ ctxBackground.beginPath(); //是通过覆盖白底实现的 ctxBackground.strokeStyle = "rgba(255,0,0,1)"; ctxBackground.lineWidth = 4; ctxBackground.lineCap = "round"; ctxBackground.lineJoin = "miter"; ctxBackground.miterLimit = 30; for(var i=1; i < arrPosX.length; i++){ ctxBackground.moveTo(canvasWidth * arrPosX[i-1], canvasHeight * arrPosY[i-1]); //指定一条线段的起点 ctxBackground.lineTo(canvasWidth * arrPosX[i], canvasHeight * arrPosY[i]); //指定一条线段的终点 } ctxBackground.stroke(); /* 绘制终点区域 */ ctxSource.clearRect(0, 0, canvasWidth,canvasHeight); ctxBackground.beginPath(); ctxBackground.strokeStyle = "rgba(255,0,0,1)"; //颜色 ctxBackground.lineWidth = 0.5; ctxBackground.fillStyle = "rgba(255,0,0,0)"; //透明度 ctxBackground.moveTo(canvasWidth * arrRoundPosX[0], canvasHeight * arrRoundPosY[0]); //指定一条线段的起点 for(var i=1; i < arrRoundPosX.length; i++){ ctxBackground.lineTo(canvasWidth * arrRoundPosX[i], canvasHeight * arrRoundPosY[i]); //指定一条线段的终点 } ctxBackground.lineTo(canvasWidth * arrRoundPosX[0], canvasHeight * arrRoundPosY[0]); ctxBackground.closePath(); ctxBackground.fill(); ctxBackground.stroke(); /* 绘制起点图标 */ ctxBackground.drawImage( imgStart, canvasWidth * arrPosX[0] - imgStart.width * 0.25, canvasHeight * arrPosY[0] - imgStart.height * 0.25 - imgStart.height * 0.25, imgStart.width * 0.5, imgStart.height * 0.5); } /** * 设置图标的跳动 */ function loop(){ if(!isStart) return; if(scale > 1.8) scale = 1; if(scaleCount > 999999) scaleCount = 0; if(runCount > 999999) runCount = 0; ctxSource.save(); ctxSource.clearRect(0,0,canvasWidth,canvasHeight); /* 设置起点图标的跳动 */ ctxSource.translate( canvasWidth * arrPosX[0] - imgStart.width * 0.25 +imgStart.width*0.25, canvasHeight * arrPosY[0] - imgStart.height * 0.25+imgStart.height*0.25); ctxSource.scale(scale, scale); ctxSource.shadowOffsetX = 3; // 阴影x轴偏移 ctxSource.shadowOffsetY = 4; // 阴影y轴偏移 ctxSource.shadowBlur = 2; // 模糊尺寸 ctxSource.shadowColor = 'rgba(0, 0, 0, 0.5)'; // 颜色 ctxSource.drawImage( imgStart, - imgStart.width * 0.25, - imgStart.height * 0.25 - imgStart.height * 0.25, imgStart.width * 0.5, imgStart.height * 0.5); ctxSource.restore(); ctxSource.save(); /* 设置终点区域的透明度变化 */ if (runCount % 4 == 0) { a = a + 0.1; } if (a > 0.6) { a = 0; } ctxSource.strokeStyle = "rgba(255,0,0,1)"; ctxSource.lineWidth = 10; ctxSource.fillStyle = "rgba(255,0,0,"+a+")"; ctxSource.moveTo(canvasWidth * arrRoundPosX[0], canvasHeight * arrRoundPosY[0]); //指定一条线段的起点 for(var i=1; i < arrRoundPosX.length; i++){ ctxSource.lineTo(canvasWidth * arrRoundPosX[i], canvasHeight * arrRoundPosY[i]); //指定一条线段的终点 } ctxSource.lineTo(canvasWidth * arrRoundPosX[0], canvasHeight * arrRoundPosY[0]); ctxSource.closePath(); ctxSource.fill(); ctxSource.restore(); ctxSource.save(); scaleCount++; runCount++; if(scaleCount % scaleInterval == 0){ scale += 0.1; } } /** * 设置标题和图片的长宽高和跳动频率 */ function start(){ $("#monitor_list_box").width = canvasWidth + "px"; $("#monitor_list_box").height = canvasHeight + "px"; $("#canvasBackground").width = canvasWidth + "px"; $("#canvasBackground").height = canvasHeight + "px"; $("#canvasSource").width = canvasWidth + "px"; $("#canvasSource").height = canvasHeight + "px"; window.setInterval(loop,1000/30); //60帧 } </script> <style type="text/css"> #monitor_list_box {width:100%; height:auto; overflow: auto;} #monitor_list_box canvas {position:absolute;width:100%; height:auto;} </style> <body> <div id="monitor_list_box"> <canvas id="canvasBackground"> Your browser does not support the canvas element. </canvas> <canvas id="canvasSource"> Your browser does not support the canvas element. </canvas> </div> </body>
相關推薦:
HTML5 Canvas-用路徑描畫線條實例介紹_html5教學技巧
以上是如何用canvas畫出一個路線圖(程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

運行 H5 項目需要以下步驟:安裝 Web 服務器、Node.js、開發工具等必要工具。搭建開發環境,創建項目文件夾、初始化項目、編寫代碼。啟動開發服務器,使用命令行運行命令。在瀏覽器中預覽項目,輸入開發服務器 URL。發布項目,優化代碼、部署項目、設置 Web 服務器配置。

H5 頁面製作是指使用 HTML5、CSS3 和 JavaScript 等技術,創建跨平台兼容的網頁。其核心在於瀏覽器解析代碼,渲染結構、樣式和交互功能。常見技術包括動畫效果、響應式設計和數據交互。為避免錯誤,應使用開發者工具調試;而性能優化和最佳實踐則包括圖像格式優化、減少請求和代碼規範等,以提高加載速度和代碼質量。

製作 H5 點擊圖標的步驟包括:在圖像編輯軟件中準備方形源圖像。在 H5 編輯器中添加交互性,設置點擊事件。創建覆蓋整個圖標的熱點。設置點擊事件的操作,如跳轉頁面或觸發動畫。導出 H5 文檔為 HTML、CSS 和 JavaScript 文件。將導出的文件部署到網站或其他平台。

H5不是獨立編程語言,而是HTML5、CSS3和JavaScript的集合,用於構建現代Web應用。 1.HTML5定義網頁結構和內容,提供新標籤和API。 2.CSS3控製樣式和佈局,引入動畫等新特性。 3.JavaScript實現動態交互,通過DOM操作和異步請求增強功能。

H5(HTML5)適合應用於輕量級應用,如營銷活動頁面、產品展示頁面和企業宣傳微網站。它優勢在於跨平台性和豐富的交互性,但局限性在於復雜的交互和動畫、本地資源訪問和離線功能。

H5referstoHTML5,apivotaltechnologyinwebdevelopment.1)HTML5introducesnewelementsandAPIsforrich,dynamicwebapplications.2)Itsupportsmultimediawithoutplugins,enhancinguserexperienceacrossdevices.3)SemanticelementsimprovecontentstructureandSEO.4)H5'srespo

是的,H5頁面製作是前端開發的重要實現方式,涉及HTML、CSS和JavaScript等核心技術。開發者通過巧妙結合這些技術,例如使用<canvas>標籤繪製圖形或使用JavaScript控制交互行為,構建出動態且功能強大的H5頁面。

H5通過語義化元素和ARIA屬性提升網頁的可訪問性和SEO效果。 1.使用、、等元素組織內容結構,提高SEO。 2.ARIA屬性如aria-label增強可訪問性,輔助技術用戶可順利使用網頁。
