Почему не работает 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, время: 06:09. |