Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не работает рисовалка canvas (https://javascript.ru/forum/misc/39592-ne-rabotaet-risovalka-canvas.html)

IVAAAAN 04.07.2013 21:54

Не работает рисовалка canvas
 
Что-то тут сам попытался написать рисовалку, не очень работает, а точнее совсем не работает
function startDraw(tool){
		var cnvs = document.getElementById('cnvs');
		var ctx = cnvs.getContext('2d');
		/*Список инструментов*/
		var brush; //кисть
		var purge; //ластик
		/*Список инструментов*/
		ctx.strokeStyle = '#000';
		var startDraw = false;

		cnvs.addEventListener('mousedown',function(tool) { //нажали на лкм
			// body...
			tool = true;
			startDraw = true;
			ctx.beginPath();

		},false);
		cnvs.addEventListener('mouseup',function(tool) { //отпустили лкм
			// body...
			tool = false;
			startDraw = false;

		},false);
		cnvs.addEventListener('mousemove',function(e,tool) { //отпустили лкм
			var x,y;
				x=e.pageX;
				y=e.pageY;
			if(startDraw==true){
				switch(tool){
					//Кисть
					case 'brush': 
						ctx.lineTo(x - cnvs.offsetLeft, y - cnvs.offsetTop);
						ctx.moveTo(x - cnvs.offsetLeft, y - cnvs.offsetTop);
						ctx.stroke();
				}//Кисть

			}

		},false);
}


<body onload="startDraw('brush');">
<canvas id="cnvs" width="800" height="500"></canvas>

Dim@ 04.07.2013 21:58

IVAAAAN,
function startDraw(){
 var startDraw;
}

:D

IVAAAAN 04.07.2013 22:07

Не помогло

IVAAAAN 04.07.2013 22:12

так я и думал, но как поправить? :-?

IVAAAAN 04.07.2013 22:31

:-? ну как же, помогите, срочно :)

IVAAAAN 04.07.2013 22:57

ну мне бы в моем только коде ошибки пофискить, а не чужой копипастить :)

IVAAAAN 04.07.2013 23:25

да вот это то я сделал, просто рисовалку то. но не понимаю как мне лучше сделать выбор инструментов, ластик например. помогите советом, а :)

IVAAAAN 05.07.2013 00:29

Никто ничего не посоветует? :-?

mta88 05.07.2013 06:00

Цитата:

Сообщение от IVAAAAN (Сообщение 260302)
Никто ничего не посоветует? :-?

у вас все обработчики событий кривые
когда они запускаются, они получают событие
а вы объявили их с переменной "tool" и думаете, что они получат тот же "tool" что и функция "startDraw"

сохраните "tool" в замыкании функции "startDraw" и используйте его оттуда
function startDraw(tool) {
  var my_tool = tool; // вот здесь
  ...
  cnvs.addEventListener('mousemove', function(e) {
    ...
    switch(my_tool) {
      ...
    }
    ...
  });
}


но даже переменная "my_tool" необязательна

function startDraw(tool) {
  ...
  cnvs.addEventListener('mousemove', function(e) {
    ...
    switch(tool) {
      ...
    }
    ...
  });
}

IVAAAAN 05.07.2013 10:25

Спасибо. Но теперь когда я выбираю другой инструмент, то их становится как бы два. Например я одновременно рисую и стираю

mta88 05.07.2013 10:50

Цитата:

Сообщение от IVAAAAN (Сообщение 260335)
Но теперь когда я выбираю другой инструмент, то их становится как бы два

вы не показали код, в котором происходит выбор нового инструмента
вряд ли так кто сможет помочь:)

IVAAAAN 05.07.2013 11:05

switch(tool){
				case 'brush':
				
				  ctx.lineTo( x, y );
			      ctx.stroke();
			      ctx.beginPath();
			      ctx.moveTo( x, y );
			      break;
			  
			  case 'purge':
			  	
			  	ctx.clearRect(x, y, ctx.lineWidth, ctx.lineWidth);
			  	break;
			  
			}

IVAAAAN 05.07.2013 11:10

Ну а выбираю инструмент я так:
startDraw('purge');
onclick="startDraw('brush');"
и т.д

mta88 05.07.2013 11:22

Цитата:

Сообщение от IVAAAAN (Сообщение 260340)
onclick="startDraw('brush');"

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

IVAAAAN 05.07.2013 11:35

Вы не поняли, вот как происходит смена инструмента:
<button onclick="startDraw('brush');">Кисть</button>
<button onclick="startDraw('purge')">Ластик</button>

После того как я выберу другой, то получается что два инструмента одновременно работают)

mta88 05.07.2013 11:44

Цитата:

Сообщение от IVAAAAN (Сообщение 260345)
Вы не поняли, вот как происходит смена инструмента:
<button onclick="startDraw('brush');">Кисть</button>
<button onclick="startDraw('purge')">Ластик</button>

нет я правильно угадал
при нажатии на кнопку запускается функция 'startDraw' а внутри нее добавляются новые обработчики событий с помощью 'addEventListener'
старые не исчезнут просто так
я уже написал что можно сделать

IVAAAAN 05.07.2013 11:53

Спасибо, сделал как Вы описали во втором варианте :)


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