Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   канва проблемы (https://javascript.ru/forum/misc/17208-kanva-problemy.html)

dmitriymar 10.05.2011 21:40

канва проблемы
 
Кто нибудь сталкивался с изменениями размеров канвы после её объявления?
1 при изменении размеров появляется вторая пара свойств...
2 центр уходит сам по себе
........................................

monolithed 10.05.2011 22:13

Цитата:

Сообщение от dmitriymar
Кто нибудь сталкивался с изменениями размеров канвы после её объявления?

<canvas id="canvas"></canvas>
<script type="text/javascript">
var canvas = document.getElementById('canvas'),
    ctx = canvas.getContext('2d');
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
    ctx.beginPath();
    ctx.arc(*!*canvas.width/2,canvas.height/2*/!*,50,0,Math.PI*2,true);
    ctx.stroke();
</script>

dmitriymar 11.05.2011 00:41

Цитата:

Сообщение от monolithed
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

style пропущен-бывает, запарка) без него размеры канвы устанавливаются равными 0 ,но сама канва приобретает произвольные размеры,в таком варианте она у меня стала примерно в 20 раз больше чем была-задавал меньшие размеры чем исходные.

попробуй канве явно задать размеры при её создании в теге,а затем измени и просмотри через фаербаг-будет две пары атрибутов высоты и ширины.если задать начало координат,то после измения размеров оно окажется не там где было. если до изменения размеров загрузить изображение с явно заданными размерами ,то после изменения размеров канвы оно займёт(даже если его заново загрузить задав явно теже размеры) оно займёт столько же % от площади канвы как и было до изменения её размеров. единственное что помогло удержать контроль -так это перезапись тега канвы с явно заданными размерами-это позволило загружать изображения контролируя их размеры и начало координат-но не во всех браузерах прошло. в старых вообще сбивало координаты и размеры контейнеров содержащих канву на координаты и размеры до изменения-канва хоть и была заменена на новую продолжала существовать со старыми размерами именем содержимым...

poorking 11.05.2011 07:19

свойства canvas.width|height - Это разрешение канваса в пикселах, а canvas.style.width|height - просто размеры.
Если canvas.style.width|height не заданы, то размеры канвы совпадают с цифрами canvas.width|height (которые если не заданы равны 300х200)
<canvas style = "border: 1px solid red; width: 100px; height : 150px;" id = ":cnv" width = "10" height = "10"></canvas>
<script type = "text/javascript">
var cnx = document.getElementById(":cnv").getContext("2d");
cnx.fillRect(2,2,6,6); //6x6px выглядит не квадратным так как отношение width/height не совпадает с style.width/style.height
</script>

Если надо например следить за кликами на канве, то свойства width и height должны совпадать с одноименными стилевыми (например по клику нужно поставить точку в этом месте), иначе проецироваться все будет не корректно

dmitriymar 11.05.2011 08:37

poorking,
на счёт разрешения просвятил-не знал . спс.-это всё объясняет. но всё равно остаётся проблема.меняю я не разрешение а её размеры-видно на фаербаге что размеры изначально есть -обращаюсь через стиль и походу получаю в разрешении...

poorking 11.05.2011 08:49

dmitriymar,
Странно, вроде все как обычно
<canvas style = "border: 1px solid red;" id = ":cnv"></canvas>
<script type = "text/javascript">
var cnv = document.getElementById(":cnv");
	//разрешение
	cnv.width = "75";
	cnv.height = "25";
	
	//размер
	cnv.style.width = "150px"
	cnv.style.height = "50px"
	
	alert("res = " + cnv.width+" x "+ cnv.height +"\nstyle = " +cnv.style.width+" x " + cnv.style.height)

</script>

dmitriymar 11.05.2011 09:00

poorking,
чуть не так -при создании тега канвы задай её размеры.затем измени,просмотри через фаербаг-у меня изменение изменение идёт не размеров а разрешения-хотя должны быть размеры.хотя это может быть и баг браузера

poorking 11.05.2011 09:08

<canvas width = "100" height = "100"></canvas>

Это не размеры а разрешение ) по умолчанию они 300x200, просто тут они идут как атрибуты, но суть та же, если задан стиль с размерами, то отображаться будет размер именно такой, какой в стиле, но если он не задан, то размер будет соответствовать разрешению в пикселах, хотя стилевые свойства будут пустые. (хотя они и так будут пустые, если их только не в коде задать)
Вобщем я для себя понял так что для размеров канвы, именно размеров на страничке, приоритет имеет именно стилевое свойство w/h, но если оно не задано, то на размер влияет разрешение
<style type = "text/css">
canvas{
    width: 40px;
    height: 30px;
     border: 1px solid red;
}
</style>
<canvas width = "1024" height = "768"></canvas>

Выглядит крохотным но на нем уместится скрин моего монитора.

Может из-за этой мешанины атрибутов и свойств в браузерах какой нибудь косяк? Попробуйте в разметке не задавать их, а только в коде менять.

dmitriymar 11.05.2011 09:39

Цитата:

Сообщение от poorking
<canvas width = "100" height = "100"></canvas>
Это не размеры а разрешение )

выходит что разрешение,во всех манах какие читал-это называлось размер канвы. но поскольку когда обращаюсь к размерам -появляется новая пара значений-значит разрешение

dmitriymar 11.05.2011 19:20

monolithed,
сори, не знал о разрешении)


Часовой пояс GMT +3, время: 17:21.