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);
....
|
|
|
|