Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.08.2012, 10:52
Аватар для Grindel
Аспирант
Отправить личное сообщение для Grindel Посмотреть профиль Найти все сообщения от Grindel
 
Регистрация: 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.
Ответить с цитированием
  #2 (permalink)  
Старый 10.08.2012, 10:53
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

onclick="draw('bla')"
Ответить с цитированием
  #3 (permalink)  
Старый 10.08.2012, 10:55
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от Grindel
Всё заработало.
наверно getContext до загрузки вызывали надо или после ready или onload
Ответить с цитированием
  #4 (permalink)  
Старый 10.08.2012, 11:10
Аватар для Grindel
Аспирант
Отправить личное сообщение для Grindel Посмотреть профиль Найти все сообщения от Grindel
 
Регистрация: 30.09.2010
Сообщений: 41

С getContext я разобрался как раз этим :$(document).ready(function() { ...
});:

Проблема сейчас эта:
Код:
Uncaught SyntaxError: Unexpected token }
Ответить с цитированием
  #5 (permalink)  
Старый 10.08.2012, 11:17
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от Grindel Посмотреть сообщение
Проблема сейчас эта:
Код:
Uncaught SyntaxError: Unexpected token }
приведите код
Ответить с цитированием
  #6 (permalink)  
Старый 10.08.2012, 11:20
Аватар для Grindel
Аспирант
Отправить личное сообщение для Grindel Посмотреть профиль Найти все сообщения от Grindel
 
Регистрация: 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');
})
Ответить с цитированием
  #7 (permalink)  
Старый 10.08.2012, 11:56
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 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.
Ответить с цитированием
  #8 (permalink)  
Старый 10.08.2012, 12:18
Аватар для Grindel
Аспирант
Отправить личное сообщение для Grindel Посмотреть профиль Найти все сообщения от Grindel
 
Регистрация: 30.09.2010
Сообщений: 41

Сообщение от vadim5june Посмотреть сообщение
sprite.onload=function(e)
А что значит "function(e)"?

Уже, нашёл)
Ответить с цитированием
  #9 (permalink)  
Старый 10.08.2012, 12:23
Аватар для Grindel
Аспирант
Отправить личное сообщение для Grindel Посмотреть профиль Найти все сообщения от Grindel
 
Регистрация: 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 (permalink)  
Старый 10.08.2012, 12:26
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 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);
....
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу разобраться с двумерным массивом pro_xaoc jQuery 6 10.06.2012 12:11
Не могу разобраться с setTimeout bazilio2010 Общие вопросы Javascript 3 14.01.2012 00:17
Функция проверки onDomReady. Не могу разобраться с кодом vandy3 Общие вопросы Javascript 6 08.11.2010 09:47
Проблемы с вызовом функции pismenov Events/DOM/Window 19 10.07.2009 11:02
Помогите разобраться в повторным обращении к функции, как её обнулить. AdvoGad Общие вопросы Javascript 0 01.09.2008 11:35