Ответ 1
Ты был близок. Итак, вопрос не в том, что касается элемента canvas в HTML5, а в холсте, который действительно является div.
http://jsfiddle.net/d9BPz/546/
Чтобы посмотреть, что пытался сделать ваш код, я должен был его убрать. Нужно было отслеживать квадратный элемент.
Мы делаем одну из двух вещей каждый раз, когда нажимаем на холст. Мы либо создаем элемент прямоугольника, либо заканчиваем элемент прямоугольника. Итак, когда мы закончили, имеет смысл установить 'element' (ранее названный 'd') равным null. При создании элемента мы должны назначить новый элемент DOM "element".
Каждый раз, когда мышь перемещается, мы хотим получить позицию мыши. Если элемент находится в процессе создания (или "не null" ), тогда нам нужно изменить размер элемента.
Затем мы завершим все это в функцию и все, что вам нужно:
function initDraw(canvas) {
var mouse = {
x: 0,
y: 0,
startX: 0,
startY: 0
};
function setMousePosition(e) {
var ev = e || window.event; //Moz || IE
if (ev.pageX) { //Moz
mouse.x = ev.pageX + window.pageXOffset;
mouse.y = ev.pageY + window.pageYOffset;
} else if (ev.clientX) { //IE
mouse.x = ev.clientX + document.body.scrollLeft;
mouse.y = ev.clientY + document.body.scrollTop;
}
};
var element = null;
canvas.onmousemove = function (e) {
setMousePosition(e);
if (element !== null) {
element.style.width = Math.abs(mouse.x - mouse.startX) + 'px';
element.style.height = Math.abs(mouse.y - mouse.startY) + 'px';
element.style.left = (mouse.x - mouse.startX < 0) ? mouse.x + 'px' : mouse.startX + 'px';
element.style.top = (mouse.y - mouse.startY < 0) ? mouse.y + 'px' : mouse.startY + 'px';
}
}
canvas.onclick = function (e) {
if (element !== null) {
element = null;
canvas.style.cursor = "default";
console.log("finsihed.");
} else {
console.log("begun.");
mouse.startX = mouse.x;
mouse.startY = mouse.y;
element = document.createElement('div');
element.className = 'rectangle'
element.style.left = mouse.x + 'px';
element.style.top = mouse.y + 'px';
canvas.appendChild(element)
canvas.style.cursor = "crosshair";
}
}
}
Использование: передать элемент уровня блока, который вы хотите сделать холстом прямоугольника. Пример:
<!doctype html>
<html>
<head>
<style>
#canvas {
width:2000px;
height:2000px;
border: 10px solid transparent;
}
.rectangle {
border: 1px solid #FF0000;
position: absolute;
}
</style>
</head>
<body>
<div id="canvas"></div>
<script src="js/initDraw.js"></script>
<script>
initDraw(document.getElementById('canvas'));
</script>
</body>
</html>