您可以使用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');
你是僅限於像JavaScript,HTML和CSS只有客戶端技術? –
是的,將編輯澄清,謝謝,目標是做到這一點在safari的iphone理想使用html5,js和iui(或其他類似的) – Joelio
作爲一個出發點:http://stackoverflow.com/questions/19461/click -an-image-get-coordinates和http://css-tricks.com/examples/ShapesOfCSS/ – ChrisW