 
			
				10.08.2012, 10:52
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.09.2010 
					
					
					
						Сообщений: 41
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Не могу разобраться с вызовом функции
			 
			
		
		
		
		Здравствуйте. 
Я пишу небольшой генератор картинок на <canvas>. 
В самом начале у меня на строке:
 
var ctx = $('#bart')[0].getContext("2d");
Вылезало: "Uncaught TypeError: Cannot call method 'getContext' of undefined " 
После оборачивания в 
 
$(document).ready(function() { ... 
});
Всё заработало.
 
Написал я скрип со следующей структурой:
 
Vars
 
function draw(text){...}
 
draw('test')
 
И всё работало!
 
Но при попытке сделать кнопочку:
 
	
 
	| 
		 Код: 
	 | 
 
	<input name='test' onclick='draw('bla')' type='button' value='Написать!'> | 
 
	
 
 
Вылезло:
 
	
 
	| 
		 Код: 
	 | 
 
	Uncaught ReferenceError: draw is not defined  | 
 
	
 
 
Я начал пытаться это исправить, но тщетно. 
Попытался вернуть всё "как было", но походу не получилось, т.к. 
Сейчас на нажатие этой же кнопочки хром реагирует так:
 
	
 
	| 
		 Код: 
	 | 
 
	Uncaught SyntaxError: Unexpected token }  | 
 
	
 
 
и указывает сюда:
 
	
 
	| 
		 Код: 
	 | 
 
	window.script1344581169582=1;  | 
 
	
 
 
Гуглил, честно!  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Grindel, 10.08.2012 в 10:54.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.08.2012, 10:53
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Студент 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.04.2012 
					
					
					
						Сообщений: 1,113
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 onclick="draw('bla')" 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.08.2012, 10:55
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Студент 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.04.2012 
					
					
					
						Сообщений: 1,113
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Grindel
			
		
	 | 
 
	| 
		Всё заработало.
	 | 
 
	
 
 наверно getContext до загрузки вызывали надо или после ready или onload  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.08.2012, 11:10
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.09.2010 
					
					
					
						Сообщений: 41
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		С getContext я разобрался как раз этим :$(document).ready(function() { ... 
});:
 
Проблема сейчас эта: 
	
 
	| 
		 Код: 
	 | 
 
	Uncaught SyntaxError: Unexpected token }  | 
 
	
 
 
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.08.2012, 11:17
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Студент 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.04.2012 
					
					
					
						Сообщений: 1,113
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от Grindel
			 
		
	 | 
 
	
		Проблема сейчас эта:
	
 
	| 
		 Код: 
	 | 
 
	Uncaught SyntaxError: Unexpected token }  | 
 
	
 
 
	 | 
 
	
 
 приведите код  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.08.2012, 11:20
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.09.2010 
					
					
					
						Сообщений: 41
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
$(document).ready(function() {
var ctx = $('#bart')[0].getContext("2d");
var sprite = new Image();
var marginTop = 48;
var marginLeft = 0;
var line = '';
var textWidth = 0;
var textCount = 0;
sprite.src = './images/sprite.png';
function draw(text){
	text += ' '; //Добавляю пробел
	ctx.fillStyle = '#fff';
	ctx.textAlign = "left";
	ctx.font = " 18px Flow ";
	textWidth = ctx.measureText(text).width;
	textCount = Math.floor(440/textWidth);
	marginLeft = (500 - textWidth*textCount)/2+3; //КОСТЫЛЬ!!! компенсирую пробел в конце строки!
	marginTop = 48; // Сбрасываю отступ сверху	
	sprite.onload = function() {
		ctx.drawImage(sprite, 0, 0, 500, 310, 0, 0, 500, 310);
		for (var tc = 0; tc < textCount; tc++){
				line += text; // Формирую строку
			};
		for (var i = 0; i < 9; i++) {
			ctx.fillText(line, marginLeft, marginTop);
			marginTop += 18;
		};
		ctx.drawImage(sprite, 498, 128, 80, 180, 406, 118, 80, 180);		
	};
};
draw('test');
})
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.08.2012, 11:56
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Студент 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.04.2012 
					
					
					
						Сообщений: 1,113
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		У Вас неправильная логика 
 sprite.onload не может быть внутри draw 
наоборот из sprite.onload надо draw вызывать
 
var sprite = new Image();
sprite.onload=function(e){draw('text')};
sprite.src=....
function draw(){ctx.drawImage...}
а потом когда будете кнопкой вызывать картинка уже загружена будет в прелоадер
 
<input type=button onclick="draw('tratata')">
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось vadim5june, 10.08.2012 в 11:59.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.08.2012, 12:18
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.09.2010 
					
					
					
						Сообщений: 41
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от vadim5june
			 
		
	 | 
 
	
		
sprite.onload=function(e)
 
	 | 
 
	
 
 А что значит "function(e)"?
 
Уже, нашёл)  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.08.2012, 12:23
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.09.2010 
					
					
					
						Сообщений: 41
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
$(document).ready(function() {
var ctx = $('#bart')[0].getContext("2d");
var sprite = new Image();
sprite.src = './images/sprite.png';
sprite.onload=function(e){draw('text')};
var marginTop = 48;
var marginLeft = 0;
var line = '';
var textWidth = 0;
var textCount = 0;
function draw(text){
	text += ' '; //Добавляю пробел
	ctx.fillStyle = '#fff';
	ctx.textAlign = "left";
	ctx.font = " 18px Flow ";
	textWidth = ctx.measureText(text).width;
	textCount = Math.floor(440/textWidth);
	marginLeft = (500 - textWidth*textCount)/2+3; //КОСТЫЛЬ!!! компенсирую пробел в конце строки!
	marginTop = 48; // Сбрасываю отступ сверху	
	ctx.drawImage(sprite, 0, 0, 500, 310, 0, 0, 500, 310);
	for (var tc = 0; tc < textCount; tc++){
		line += text; // Формирую строку
	};
	for (var i = 0; i < 9; i++) {
		ctx.fillText(line, marginLeft, marginTop);
		marginTop += 18;
	};
	ctx.drawImage(sprite, 498, 128, 80, 180, 406, 118, 80, 180);		
};
});
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Grindel, 10.08.2012 в 12:31.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.08.2012, 12:26
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Студент 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.04.2012 
					
					
					
						Сообщений: 1,113
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		а зачем  sprite.onload = function() { 
внутри оставили-? 
просто оставьте
 
marginLeft = (500 - textWidth*textCount)/2+3; 
marginTop = 48;
ctx.drawImage(sprite, 0, 0, 500, 310, 0, 0, 500, 310);
....
  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |