Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Плавное перемещение блока 
V
    Опции темы
ayax2005
Дата 22.11.2009, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


echo $smile
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 17.4.2008
Где: Питер

Репутация: 2
Всего: 11



Добрый день!
Боевая задача: имеется блок, содержащий в ряд N изображений и кнопка.
По событию нажатия кнопки происходит сдвиг изображений влево на заданное количество пикселей.

HTML:
Код

<img src='image/d1.png'  onclick="rightimg(cntimg);" />

где cntimg - количество изображений.

JS:
Код

function rightimg($cntimg){
    //смещение
    $going = 660;
    //позиция первого изображения
    $start = parseInt(document.getElementById('dimg1').style.left);
    //цикл по пикселям - смещение N изображений на 5 пикселей
    for($i = 0; $i < $going; $i = ($i + 5)){
       //временная переменная для хранения текущего смещения
       $temp = $start - $i;
       //цикл по изображениям - 
       for($j = 1; $j < $cntimg; $j++){
           //применение смещения
           document.getElementById('dimg'+$j).style.left = $temp + "px";}
    }
}


Проблема в том, что в окне браузера отрисовка происходит непосредственно после выполнения функции. Т.е. не удается добиться плавности мещения.

Пытался в различных вариантах использовать подстановку задержки в цикле по пикселям: ID = window.setTimeout("Update();", 2000); - где Update() функция с простым оператором присваивания, но ничего не вышло - задержки нет, даже если вместо 2000 указать 10000.
Пытался использовать такую функцию: 
Код

function pausecomp(millis) { 
  var date = new Date(); 
  var curDate = null; 
  do { curDate = new Date(); } 
  while(curDate-date < millis); 
}

Задержка появляется, но выглядит это скорее как подвисание скрипта - плавности так же нет, просто отрисовка происходит позже, но опять же, перемещение изображений происходит сразу в конечную позицию.

Вторую ночь борюсь с этим, пожалуйста ,помогите...


--------------------
все вопросы - из-за неверной формулировки задачи
PM MAIL ICQ   Вверх
Sardar
Дата 22.11.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Лучше положить картинки в

Код

<div style="position: relative; overflow: hidden">
 <div style="position: absolute; top: 0px; left: 0px;">
   <img src....>
 </div>
</div>


Выставляешь слоям ширину/высоту, двигаешь внутренний слой. Прокрутка всех картинок будет плавной.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
ayax2005
Дата 22.11.2009, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


echo $smile
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 17.4.2008
Где: Питер

Репутация: 2
Всего: 11



В виде коде HTML я привёл только вызов функции - это сама кнопка, а не изображение, которое я хочу двигать.
Картинки организованы примерно таким способом (только position: relative, в силу определенных обстоятельств), как Вы предлагаете, но плавности нет.




--------------------
все вопросы - из-за неверной формулировки задачи
PM MAIL ICQ   Вверх
ayax2005
Дата 22.11.2009, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


echo $smile
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 17.4.2008
Где: Питер

Репутация: 2
Всего: 11



Я нашёл решение проблемы.
Если кому-то интересно:
Таймер или Интервал не запускаются из функции, запущенной по событию. Уж почему, не знаю, видимо так организован стек JS.

Тем не менее, для того, что бы добиться плавности, оказалось достаточным вставить вызов таймера непосредственно из события.


--------------------
все вопросы - из-за неверной формулировки задачи
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0440 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.