栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在画布上加载图像并在单击上放置标记

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在画布上加载图像并在单击上放置标记

Zrik好的,我为您创建了一个jsFiddle,它应该为您提供一个不错的开始:)。

jsFiddle:https
://jsfiddle.net/7hed6uxL/2/

HTML

<p>Click on the map to place a marker</p><canvas id="Canvas" width="700" height="700"></canvas>

Java脚本

// Target the canvas element on the pagevar canvas = document.getElementById('Canvas');var context = canvas.getContext("2d");// Map spritevar mapSprite = new Image();mapSprite.src = "http://www.retrogameguide.com/images/screenshots/snes-legend-of-zelda-link-to-the-past-8.jpg";// Create a basic class which will be used to create a markervar Marker = function () {    this.Sprite = new Image();    this.Sprite.src = "http://www.clker.com/cliparts/w/O/e/P/x/i/map-marker-hi.png"    this.Width = 12;    this.Height = 20;    this.XPos = 0;    this.YPos = 0;}// Array of markersvar Markers = new Array();// When the user clicks their mouse on our canvas run this prevar mouseClicked = function (mouse) {    // Get corrent mouse coords    var rect = canvas.getBoundingClientRect();    var mouseXPos = (mouse.x - rect.left);    var mouseYPos = (mouse.y - rect.top);    // Move the marker when placed to a better location    var marker = new Marker();    marker.XPos = mouseXPos - (marker.Width / 2);    marker.YPos = mouseYPos - marker.Height;    // Push our new marker to our Markers array    Markers.push(marker);}// Add mouse click event listener to canvascanvas.addEventListener("mousedown", mouseClicked, false);// Run this once so we setup text renderingvar firstLoad = function () {    context.font = "15px Georgia";    context.textAlign = "center";}firstLoad();// This will be called 60 times a second, look at the pre at the bottom `setInterval`var main = function () {    // Update our canvas    draw();};var draw = function () {    // Clear Canvas    context.fillStyle = "#000";    context.fillRect(0, 0, canvas.width, canvas.height);    // Draw map    // Sprite, X location, Y location, Image width, Image height    // You can leave the image height and width off, if you do it will draw the image at default size    context.drawImage(mapSprite, 0, 0, 700, 700);    // Draw markers    for (var i = 0; i < Markers.length; i++) {        var tempMarker = Markers[i];        // Draw marker        context.drawImage(tempMarker.Sprite, tempMarker.XPos, tempMarker.YPos, tempMarker.Width, tempMarker.Height);        // Calculate position text        var markerText = "Postion (X:" + tempMarker.XPos + ", Y:" + tempMarker.YPos;        // Draw a simple box so you can see the position        var textMeasurements = context.measureText(markerText);        context.fillStyle = "#666";        context.globalAlpha = 0.7;        context.fillRect(tempMarker.XPos - (textMeasurements.width / 2), tempMarker.YPos - 15, textMeasurements.width, 20);        context.globalAlpha = 1;        // Draw position above        context.fillStyle = "#000";        context.fillText(markerText, tempMarker.XPos, tempMarker.YPos);    }};setInterval(main, (1000 / 60)); // Refresh 60 times a second

我已经注释了代码,因此它应该向您解释所有内容,如果您需要更多帮助,请告诉我。另外,只是为了让您知道不

context.fillRect(tempMarker.XPos- (textMeasurements.width / 2), tempMarker.YPos - 15, textMeasurements.width,20);
应该
20
在此行上使用硬编码数字,您可能应该将值存储在变量中,因为这将始终是文本背景框的高度。但是我把它放在那里,让您了解对您有用的东西。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/418213.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号