javascript - 单击按钮存储后如何存储X和Y坐标
问题描述
我试图在单击画布后存储 x 和 y 坐标,我可以设置标记位置,我可以在该位置显示 x 和 y 坐标和标记的图片,但现在我想存储这些坐标以便当您重新加载网络浏览器时,标记位置仍将位于您第一次放置它的位置。
完整的代码下来..
var context = (this.canvas.nativeElement as HTMLCanvasElement).getContext("2d")
//Map sprite
var mapSprite = new Image();
mapSprite.src = "http://antyradar.info/wp-content/uploads/commercial-tumilty-design-commercial-floor-plans.jpg";
var Marker = function () {
this.Sprite = new Image();
this.Sprite.src = "https://www.lasvegas-waterdelivery.com/wp-content/uploads/2016/07/5gal-cropped.png"
this.Width = 12;
this.Height = 20;
this.XPos = 0;
this.YPos = 0;
}
var Markers = new Array();
var rect = (this.canvas.nativeElement as HTMLCanvasElement).getBoundingClientRect();
var mouseClicked = function (mouse) {
// Get current mouse coords
var mouseXPos = (mouse.x - rect.left);
var mouseYPos = (mouse.y - rect.top);
console.log("x: " + mouseXPos);
console.log("y: " + mouseYPos)
console.log("Marker added");
// Move the marker when placed to a better location
var marker = new Marker();
marker.XPos = mouseXPos - (marker.Width * 37.7);
marker.YPos = mouseYPos - (marker.Height * 7);
Markers.push(marker);
for (var i = 0; i < Markers.length; i++) {
if(i > 1){
Markers.splice(marker);
}
}
sessionStorage.setItem('Marker', JSON.stringify(marker));
let store = sessionStorage.getItem('Marker');
console.log(store);
var remember = function(){
return store;
}
}
// Add mouse click event listener to canvas
/* (this.canvas.nativeElement as HTMLCanvasElement).addEventListener("mousedown", mouseClicked, false); */
var firstLoad = function () {
context.font = "15px Georgia";
context.textAlign = "center";
}
firstLoad();
var main = function () {
draw();
};
var width = (this.canvas.nativeElement as HTMLCanvasElement).width
var height = (this.canvas.nativeElement as HTMLCanvasElement).height
var draw = function () {
// Clear Canvas
context.fillStyle = "#000";
context.fillRect(0, 0, width, 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);
}
};
setInterval(main, (1000 / 10)); // Refresh 60 times a second
}
解决方案
您可以使用Window.sessionStorage来存储您的坐标。
sessionStorage.setItem('Marker', JSON.stringify(marker));
推荐阅读
- sql - 实体框架连接多个表很慢
- c++ - 如何在 C++ 中使用 OpenMP 并行递归函数
- laravel - 如何在 laravel 6 中将注销方法更改为 GET?
- c - 如何在C中通过引用将矩阵传递给函数?
- java - PageNotFound - 不支持请求方法“GET”
- nodemcu - 如何在 proteus 模拟中将我的代码或我的 .hex 文件上传到 nodeMCU?
- c++ - 通过 libvlc 将音频转换为解压缩 wav
- javascript - 登录按钮单击ReactJS后如何更改页面
- c# - 无法从 .Net Core 3.0 中的程序集中加载类型
- arrays - TypeScript:定义未知大小的数组类型,其中第一个元素是 A 类型,其余元素是 B 类型