Вероятно вы позволяете изменение размера холста, основанный на его контейнер div. Это может ввести проблему.
Если вы измените размер CSS на холсте, используя разные проценты для ширины &, тогда содержимое холста будет искажаться - оно растянется.
Чтобы избежать искажений, вы должны изменить размер холста шириной & по высоте пропорционально (на тот же процент). Пространственно измененный холст не обязательно будет заполнять новый размер div, как и раньше.
Альтернатива:
Изменить размер самого холста элемента & использовать преобразование масштабирования перерисовывать ваше содержание
Таким образом, вам не нужно будет пересчитывать радиус или положение вашего круга. Вы можете использовать те же команды рисования, которые изначально использовались для рисования круга. Встроенное масштабирование холста сделает все пересчеты для вас!
Получить ссылку на ваш холст & вашей сНу контейнера и сохранить оригинальный размер Div
var divcontainer=document.getElementById('mydiv');
var canvas=document.getElementById('mycanvas');
var context=canvas.getContext('2d');
var originalWidth=divcontainer.width;
var originalHeight=divcontainer.height;
Изменение размера холста элемент на новый размер Див.
var newWidth=divcontainer.width;
var newHeight=divcontainer.height;
// Notes:
// Resizing the canvas element will clear its content
// This alternative allows the canvas to resize disproportionately
canvas.width=newWidth;
canvas.height=newHeight;
Использование контекстного масштабирования для автоматического изменения размера холста. Любое перерисованное содержимое будет автоматически масштабироваться с использованием тех же оригинальных команд рисования.
// calculate the scaling percentage necessary such that
// new content will fit on the canvas
var scaleFactor=Math.min((newWidth/originalWidth),(newHeight/originalHeight));
// scale the canvas
context.scale(scaleFactor);
// now redraw all content (your circle) using their original sizes & coordinates
// unscale the canvas
// (scaling is cumulative, so this cleans up for the next resizing)
context.scale(-scaleFactor);
контроль этот ответ http://stackoverflow.com/questions/1821702/resize-image-map-on-window-resize это о карте изображения, но вы можете переписать, что для ваших нужд и элемент canvas –
Этот вопрос будет улучшен путем добавления jsfiddle, показывающего, как вы создали холст и отзывчивость на странице. http://jsfiddle.net/ –