Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.07.2016, 11:09
Интересующийся
Отправить личное сообщение для butch16 Посмотреть профиль Найти все сообщения от butch16
 
Регистрация: 13.07.2016
Сообщений: 11

Почему не работает 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();
	}
// далее код описывающий движение...

Последний раз редактировалось butch16, 22.07.2016 в 12:17.
Ответить с цитированием
  #2 (permalink)  
Старый 22.07.2016, 11:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от butch16
this.stop();
замените this на заранее подготовленную переменную
var self = this;
setTimeout(function() {
 self.stop(); 
 alert('Boom!');
 }, 500);
 }


Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #3 (permalink)  
Старый 22.07.2016, 12:24
Интересующийся
Отправить личное сообщение для butch16 Посмотреть профиль Найти все сообщения от butch16
 
Регистрация: 13.07.2016
Сообщений: 11

Добавил, к сожалению, если раньше не было только реакции на this.stop(); в setTimeout, то теперь код просто перестал работать, ничего не запускается вообще... Объявлял переменную и внутри this.frame_0 = function() и в самом начале, результат тот же...
Ответить с цитированием
  #4 (permalink)  
Старый 22.07.2016, 12:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

butch16,
var self = this; в строку 33 попробуйте добавить
Ответить с цитированием
  #5 (permalink)  
Старый 22.07.2016, 13:55
Интересующийся
Отправить личное сообщение для butch16 Посмотреть профиль Найти все сообщения от butch16
 
Регистрация: 13.07.2016
Сообщений: 11

Большое спасибо! Все заработало. )
Ответить с цитированием
  #6 (permalink)  
Старый 12.08.2016, 10:38
Аспирант
Отправить личное сообщение для Benos Посмотреть профиль Найти все сообщения от Benos
 
Регистрация: 09.01.2012
Сообщений: 48

что бы не плодить тему спрошу тут.
Подскажите как по средствам setTimeout вызвать функцию с параметром.
В интернете ничего не нашел.
запись вида
var timer = setTimeout(test(1), 3000);

не срабатывает.
Есть ли решение или надо городить внешние ключи(переменные)?
Ответить с цитированием
  #7 (permalink)  
Старый 12.08.2016, 10:45
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Самое очевидное.

var timer = setTimeout(function(){

    test(1);

}, 3000);


С некоторых пор (как всегда все смотрят на Ишака, а именно с 10-ки) предусмотрена передача параметра, тут почитай https://developer.mozilla.org/en-US/...back_arguments

Вообще, если потребовалось передавать что-то в калбек таймера, значит что-то сделано не совсем правильно.

Последний раз редактировалось warren buffet, 12.08.2016 в 10:52.
Ответить с цитированием
  #8 (permalink)  
Старый 12.08.2016, 12:19
Аспирант
Отправить личное сообщение для Benos Посмотреть профиль Найти все сообщения от Benos
 
Регистрация: 09.01.2012
Сообщений: 48

warren buffet,
это для того что бы не плодить доп. функции. Хочу сделать их унифицированные и вызывать их с параметром.
Но вызов функций идет с задержкой по времени.
Вот и выходит... либо вызов по таймеру одной функции с разными параметрами... либо вызов по таймеру разных функций без параметров... но тогда код увеличивается

Последний раз редактировалось Benos, 12.08.2016 в 12:22.
Ответить с цитированием
  #9 (permalink)  
Старый 12.08.2016, 13:46
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от Benos
что бы не плодить доп. функции
Как вариант...
var timer = setTimeout((function(Val){
   return function(){alert(Val)};
})('test'), 3000);
Ответить с цитированием
  #10 (permalink)  
Старый 12.08.2016, 13:53
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Обрисуй нужды примерно так.

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) */

Последний раз редактировалось warren buffet, 12.08.2016 в 14:00.
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не работает подключенный скрипт?? ivt22 Элементы интерфейса 1 04.01.2016 10:59
cookie почему не работает скрипт Alven Общие вопросы Javascript 1 01.09.2013 03:17
В Mozilla работает а в Opera нет почему? alex2012 Общие вопросы Javascript 2 03.08.2013 22:43
Не пойму почему не работает код? Mukhtar Events/DOM/Window 4 29.04.2013 00:01
Почему не работает функция? Vitaly jQuery 10 31.07.2009 17:01