Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Заблокирован

Реализация плавной анимации чистый JS+CSS

23.03.2018, 20:51. Показов 2053. Ответов 4

Студворк — интернет-сервис помощи студентам
Доброго вечера друзья. Суть вопроса такова. Есть код, на JS взаимодействующий с CSS. нужно организовать плавную анимацию между "шагами" анимации. Что бы каждый шаг выполнялся обособленно, и была возможность реализовать выполнение плавно каждого шага. те. (выполняется шаг один, пауза, выполняется шаг второй, пауза) и у каждого шага задан параметр плавности. Либо просто как выполнять шаги в JS плавно. Не знаю на сколько понятно сформулировал. Вот код:
JavaScript
1
2
3
4
5
6
7
8
cop_body.onmouseover =function(){           
        star_icon.style.marginLeft= '35px';//шаг 1       
        star_icon.style.marginLeft='54px' ;//шаг 2
        star_icon.style.marginLeft='81px' ;//шаг 3
        star_icon.style.marginLeft='108px' ;//шаг 4
        star_icon.style.marginLeft='130px' ;//шаг 5
        star_icon.style.marginLeft='160px';//шаг 6
        star_icon.style.marginLeft='178px'; //шаг 7
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.03.2018, 20:51
Ответы с готовыми решениями:

Создание плавной анимации
У меня есть программа где я нарисовал человечка и задал ему движение на стрелках. Но когда он движется clrscr плохо работает картинка...

Создание плавной анимации перемещения PictureBox
Для анимации PictureBox я использую таймер и изменяю координаты картинки в форме, но при этом картинка как то виснет оставляя переодичеки...

Как в css сделать плавной анимацию при отведении мыши?
привет! вот у меня есть код: <div class="floating"></div> .floating{ width: 50px; height: 50px; background:...

4
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
24.03.2018, 13:53
Может можно проще как-то, но на чистом js и css пока только такое получилось:


HTML5
1
2
3
<div id="cop_body">
  <div id="star_icon"></div>
</div>

CSS
1
2
3
4
5
6
7
8
9
10
11
#star_icon {
  width:100px;
  height:100px;
  display: inline-block;
  background-color:yellow;
}
 
#cop_body {
  background-color:green;
  padding:10px;
}

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
var cop_body = document.getElementById('cop_body');
 
var margin = 'marginLeft';
var duration = 'transitionDuration';
 
var initStyles = [      
  {
    key: duration,
    value: '0s'
  },
  {
    key: margin,
    value: '0px'
  }
];
 
var steps = [
 {                              // step 1
   beforeDelay: 1000,
   styles: [
     {
       key: duration,
       value: '1s'
     },
     {
       key: margin,
       value: '35px'
     }
   ]
 },
 {                              // step 2
   beforeDelay: 1000,
   styles: [
     {
       key: duration,
       value: '0.5s'
     },
     {
       key: margin,
       value: '100px'
     }
   ]
 },
 {                              // step 3
   beforeDelay: 3000,
   styles: [
     {
       key: duration,
       value: '2s'
     },
     {
       key: margin,
       value: '200px'
     }
   ]
 }
];
 
function detectTransitionEvent(){
    var t;
    var el = document.createElement('fakeelement');
    var transitions = {
      'transition':'transitionend',
      'OTransition':'oTransitionEnd',
      'MozTransition':'transitionend',
      'WebkitTransition':'webkitTransitionEnd'
    }
 
    for(t in transitions){
        if( el.style[t] !== undefined ){
            return transitions[t];
        }
    }
};
 
var isInProcess = false;
cop_body.onmouseover = function () { 
    var stepIndex = 0;
  if (!isInProcess) {
    var star_icon = document.getElementById('star_icon');
    applyStyles(star_icon, initStyles);
    isInProcess = true;
    var transitionEvent = detectTransitionEvent();
    var length = steps.length;
    if (transitionEvent && length) {
        var handleAnimationEnd = function(e) {
      $this = e.target;
      if (++stepIndex == length) {
            console.log('end');
            isInProcess = false;
            stepIndex = 0;
            $this.removeEventListener($this, handleAnimationEnd);
            return false;
          } else {
          setTimeout(function () {
            applyStyles($this, steps[stepIndex].styles);          
          }, steps[stepIndex].beforeDelay || 0);
        }
      }
    
      star_icon.addEventListener(transitionEvent, handleAnimationEnd);
      
      setTimeout(function () {
        applyStyles(star_icon, steps[stepIndex].styles);
      }, steps[stepIndex].beforeDelay || 0);
    }
  }
}
    
function applyStyles (element, styles) {
    Object.keys(styles).forEach(function(styleArrayIndex) {
    element.style[styles[styleArrayIndex].key] = styles[styleArrayIndex].value;
  });
}

https://jsfiddle.net/wxys69ft/115/
1
Заблокирован
24.03.2018, 22:14  [ТС]
Спасибо буду разбираться в качестве образовательного примера. Сам пришел к такого рода реализаии https://codepen.io/BioRenGen/pen/ZxJeQW
0
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
24.03.2018, 23:02
Ну вы через кейфреймы решили. Я тоже так думал предложить, но отложил эту мысль из-за необходимости каждый раз вычислять нужные %.
0
Заблокирован
24.03.2018, 23:04  [ТС]
Вот методом научного тыка получилось то, что требуется. главное что все довольны. Хотя я сам в своем коде один момент немного не понимаю. почему нужно было указывать конечную точку анимации в скрипте.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.03.2018, 23:04
Помогаю со студенческими работами здесь

Чистый HTML & CSS, или WordPress
Кто ответит аргументированно на поставленный в заголовке вопрос? HTML &amp; CSS сайты меньше по объему, не имеют БД, не вызывают...

Реализация сборки пазла с использованием Drag'N'Drop (чистый JavaScript)
Есть три блока: блок изображения пазла, блок изображения пазла разбитого на 25 частей и такой же блок только полупрозрачный (50%...

Css анимации
Возникла проблема, есть анимация рулетки, запускается тогда, когда таймер 0, так вот, если юзер в это время на другой вкладке, а потом во...

Реализация анимации
Всем привет. Необходима любая информация по созданию анимации на основе костей( желательно на webgl, но подойдет и для opengl). Дело в том,...

Ошибка анимации css
Вот кусок кода css. Это анимация css3. На сайте всё работает, но не проходит валидацию. Пишет - Извините, но правило @-webkit (moz)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru