Почему не работает setTimeout?
Здравствуйте! Мне уже помогли на этом форуме, попробую еще раз.))) Я дизайнер, а не программист и в javascript полный чайник.
Проблема такая: Есть простейший баннер сделанный для примера Adobe Animate: круг движется по прямой до границ баннера и обратно. Хочу его остановить через заданное время. Если использую просто stop(), то проигрывание останавливается в любом кадре, а если использую setTimeout, то ничего не происходит, причем Alert прекрасно срабатывает... в чем проблема? Код:
(function (lib, img, cjs, ss) {
var p; // shortcut to reference prototypes
// library properties:
lib.properties = {
width: 240,
height: 400,
fps: 24,
color: "#FFFFFF",
manifest: []
};
// symbols:
(lib.Символ1 = function(mode,startPosition,loop) {
this.initialize(mode,startPosition,loop,{});
// Слой 1
this.shape = new cjs.Shape();
this.shape.graphics.f("#999999").s().p("AqpKpQkbkaAAmPQAAmOEbkbQEbkbGOAAQGPAAEaEbQEbEbAAGOQAAGPkbEaQkaEbmPAAQmOAAkbkbg");
this.shape.setTransform(96.5,96.5);
this.timeline.addTween(cjs.Tween.get(this.shape).wait(1));
}).prototype = p = new cjs.MovieClip();
p.nominalBounds = new cjs.Rectangle(0,0,193,193);
// stage content:
(lib.Proba = function(mode,startPosition,loop) {
this.initialize(mode,startPosition,loop,{});
// timeline functions:
this.frame_0 = function() {
setTimeout(function() {
this.stop();
alert('Boom!');
}, 500);
}
this.frame_79 = function() {
this.stop();
}
// далее код описывающий движение...
|
Цитата:
var self = this;
setTimeout(function() {
self.stop();
alert('Boom!');
}, 500);
}
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Добавил, к сожалению, если раньше не было только реакции на this.stop(); в setTimeout, то теперь код просто перестал работать, ничего не запускается вообще... Объявлял переменную и внутри this.frame_0 = function() и в самом начале, результат тот же...
|
butch16,
var self = this; в строку 33 попробуйте добавить |
Большое спасибо! Все заработало. )
|
что бы не плодить тему спрошу тут.
Подскажите как по средствам setTimeout вызвать функцию с параметром. В интернете ничего не нашел. запись вида var timer = setTimeout(test(1), 3000); не срабатывает. Есть ли решение или надо городить внешние ключи(переменные)? |
Самое очевидное.
var timer = setTimeout(function(){
test(1);
}, 3000);
С некоторых пор (как всегда все смотрят на Ишака, а именно с 10-ки) предусмотрена передача параметра, тут почитай https://developer.mozilla.org/en-US/...back_arguments Вообще, если потребовалось передавать что-то в калбек таймера, значит что-то сделано не совсем правильно. |
warren buffet,
это для того что бы не плодить доп. функции. Хочу сделать их унифицированные и вызывать их с параметром. Но вызов функций идет с задержкой по времени. Вот и выходит... либо вызов по таймеру одной функции с разными параметрами... либо вызов по таймеру разных функций без параметров... но тогда код увеличивается :) |
Цитата:
var timer = setTimeout((function(Val){
return function(){alert(Val)};
})('test'), 3000);
|
Обрисуй нужды примерно так.
var funTimer = function(d){
this.t=null,
this.go=function(cb,param,delay){
if(this.t) clearTimeout(this.t);
this.t=setTimeout(function(){cb(param);},d||delay);
}
};
/* usage */
var ft= new funTimer(1000);
ft.go(see_you_later,24);
/* через 1 сек запустится see_you_later(24) */
|
| Часовой пояс GMT +3, время: 16:54. |