Две проблемы:
1) вы устанавливаете ширину холста с помощью правила CSS. Это не сработает. Если вы не задаете размер для холста, он будет по умолчанию 300 x 150 пикселей независимо от того, что вы задали с помощью CSS. Это означает, что все в нем масштабируется (как если бы это был образ фиксированного размера, который является в основном холстом). Если вы do установите размер, но по-прежнему используете CSS, , размер будет масштабироваться.
Вы теряете производительность и качество, и вам также нужно будет пересчитать позиции мыши.
Необходимо обновить размер от Javascript.
#canvas, #canvasCursor {
cursor: none;
background: #fff;
position: absolute;
left: 50px;
top: 30px;
width: 62%; /* REMOVE */
height: 80%; /* REMOVE */
z-index: 1;
}
2) Вы не обновляете размер холста из любого места. Вы можете обновить холст, установив его ширину и высоту свойства - установить его размер окна можно использовать:
window.onresize = function() {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
//call redraw
}
или если вы хотите установить его в проценты вам нужно рассчитать, так как холст не принимает значение%.
window.onresize = function() {
canvas.width = window.innerWidth * 0.62; //ie. 62% of width
canvas.height = window.innerHeight * 0.8; //ie. 80% of height
//call redraw
}
Холст использует ТОЛЬКО пиксельные размеры, поскольку этот элемент является особым случаем.
Почему innerWidth/Height? Это представляет собой фактическое окно просмотра для окна, которое вы видите (вы увидите это более четко с помощью мобильного устройства).
Если вы просто хотите, фиксированный размер можно установить, что непосредственно:
canvas.width = 800;
canvas.height = 600;
Зачем вам нужно обновить (перерисовать все)? Холст имеет только снимок того, что на него нарисовано, - он не хранит его копию. Что на экране.
При изменении размера он повторно инициализируется, и поэтому вам необходимо его обновить. Это будет иметь небольшую производительность, если у вас не много чего перерисовать. Это произойдет, только если пользователь изменит размер окна браузера.
Он работает спасибо. Однако слушатели не перепутаны. Любые идеи, поскольку я думал, что они были основаны на моей ширине/высоте холста? http://www.taffatech.com/Paint.html Это код для слушателей: mouseX = e.pageX - this.offsetLeft; mouseY = e.pageY - this.offsetTop; –
@StevenBarrett Ах, для координат мыши, см. Мой ответ здесь: http://stackoverflow.com/questions/17130395/canvas-html5-real-mouse-position/17130415#17130415 – K3N
Забудьте, что это сработало! Благодаря! - для других, не забудьте изменить размер на всех слоях холста не только основной, но и слушателей не будет в очереди! –