我想拥有一辆汽车的图像,当用户点击汽车上的某个位置时,我会在该位置放置x图像或圆形图像。我需要保存他们点击的位置,所以当他们回来时我会在同一个地方显示它。
在html中执行此操作的最佳方法是什么?
我应该使用覆盖在其上的其他图像的图像吗?
我应该使用html5吗?
有人知道任何类似性质的工作实例吗?
想要使用js,html5等在iphone safari(非本机应用程序)上运行。应用程序是ruby on rails,所以我可以使用一些服务器端功能,但如果可能的话,更愿意在html / css中使用。
答案 0 :(得分:3)
您可以使用canvas
元素执行此操作。 canvas
元素允许您绘制图像和形状。
要存储和检索点击,您可以使用网络存储(localStorage
)。
例如 - 加载图像并将其绘制到画布:
<强> ONLINE DEMO HERE 强>
<强> HTML 强>:
<canvas id="demo" width="500" height="400"></canvas>
<强>的JavaScript 强>:
/// get context for canvas, cache dimension
var ctx = demo.getContext('2d'),
w = demo.width,
h = demo.height,
img = new Image(); /// the image we want to load
/// when done go draw existing marks and start listening for clicks
img.onload = function() {
renderMarks();
demo.onclick = function(e) {
/// convert mouse coord relative to canvas
var rect = demo.getBoundingClientRect(),
x = e.clientX - rect.left,
y = e.clientY - rect.top;
/// store mark
addMark(x, y);
/// redraw everything
renderMarks();
}
}
这些是主要功能,首先将现有标记渲染到图像顶部的画布上:
function renderMarks() {
/// re-draw image which also serves to clear canvas
ctx.drawImage(img, 0, 0, w, h);
/// get existing marks from localStorage
var marks = localStorage.getItem('marks'),
i = 0;
/// if any, render them all
if (marks !== null) {
/// localStorage can only store strings
marks = JSON.parse(marks);
/// set color and line width of circle
ctx.strokeStyle = '#f00';
ctx.lineWidth = 3;
/// iterate marks and draw each one
for(;i < marks.length; i++) {
ctx.beginPath();
ctx.arc(marks[i][0], marks[i][1], 30, 0, 2 * Math.PI);
ctx.stroke();
}
}
}
这会在集合中添加标记:
function addMark(x, y) {
/// get existing marks or initialize
var marks = JSON.parse(localStorage.getItem('marks') || '[]');
/// add mark
marks.push([x, y]);
/// update storage
localStorage.setItem('marks', JSON.stringify(marks));
}
(代码可以通过各种方式进行优化,但我是为了展示基本原理。)
如果您现在离开页面并返回,您将看到标记再次呈现(免责声明:jsfiddle可能会或可能不会提供相同的页面,因此在本地/在“真实”页面中进行测试以确保)。
这里的圆圈可以是任何东西,图像,不同的形状等等。
要清除标记,只需致电:
localStorage.clear();
或者如果您也存储其他数据:
localStorage.removeItem('marks');
答案 1 :(得分:0)
嗯,您可以为每个点创建新图像,当用户单击时,您可以用新图像替换原始图像。你可以使用CSS或jQuery)
答案 2 :(得分:0)