[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Прокрутка текстового блока
Ser18
Здравствуйте

Помогите решить проблему

Задача:
С флеш поступает текущее время проигрывания песни

Надо двигать блок с текстом синхронно со звуковым файлом
У каждой строки есть время ее начала

Вот функция которая за это отвечает
Высота строки 16px
Функция вызывается каждые 30 миллисекунд
time - текущее время в секундах
arr - массив времени для каждой строки (в секундах)

// Показываем титры
var count_arr = 0; // Сохраняем текущий индекс массива
var time_segment = 0; //Время между двумя строками
var count_pixel = 0;//Считаем на сколько пикселей сдвинули блок
var step_sauter_segment = 0; // Количество пропускаемых итераций в промежуток времени
var step_sauter_segment_equilibrer = 0; // Остаток от деления (при получении колличества пропускаемых итераций)
var step_depasse = 0; // Считает на сколько превышен лимит пропуска итераций
var count_step_sauter = 0; //Считаем количество пропущенных итераций
var margin_top = 28; // Текущий отступ блока
function vueTitre(time, arr){
if((count_arr+1) < arr.length){
var count_arr_apre = count_arr+1; // Сохраняем следующий индекс массива
}else{
clearTimeout(enterFrame)
stopSetVariable();
alert('Stop');
}
//*
if(time >= arr[count_arr_apre][0]){
count_arr++;
}
//*/
if(count_pixel == 0){
var start_time = arr[count_arr][0]; // Начальное время промежутка
var end_time = arr[count_arr_apre][0]; // Конечное время промежутка
time_segment = end_time - start_time; //Узнаем время между двумя строками
time_segment *= 1000; // переводим миллисекунды
//Промежуток времени/частота итераций/высота строки(px)

var step_sauter_segment_fl = (time_segment/30)/16;
step_sauter_segment = parseInt(step_sauter_segment_fl);
// Получаем остаток пропускаемых итераций
step_sauter_segment_equilibrer += (step_sauter_segment_fl - step_sauter_segment);
if(step_sauter_segment_equilibrer > 0){
step_sauter_segment++;
step_depasse++;
}
if(step_sauter_segment_equilibrer > 1){
step_sauter_segment -= step_depasse;
step_depasse = 0;
}
}


if(count_step_sauter == 0){
count_pixel++;
margin_top--;
$('#titre_fr2').css({'margin-top':margin_top+'px'});
}
if((step_sauter_segment) <= count_step_sauter){
$('#test').html(count_step_sauter);
count_step_sauter = 0;
}else{
count_step_sauter++;
}
if(count_pixel == 16){
count_pixel = 0;
}
// Вывод значений переменных
$('#step').html('time_segment: '+time_segment+'<br/>'+
' | step_sauter_segment: '+step_sauter_segment+'<br/>'+
' | step_sauter_segment_equilibrer: '+step_sauter_segment_equilibrer+'<br/>'+
' | count_step_sauter: '+count_step_sauter+'<br/>'+
' | step_sauter_segment: '+step_sauter_segment+'<br/>'+
' | count_pixel: '+count_pixel);
}

По началу работает нормально, но постепенно начинает отставать
Или может это как то по другому делается?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.