{"id":3291,"date":"2023-07-15T12:18:00","date_gmt":"2023-07-15T10:18:00","guid":{"rendered":"https:\/\/jagullo.fr\/blog\/?p=3291"},"modified":"2023-02-25T17:51:34","modified_gmt":"2023-02-25T16:51:34","slug":"les-courbes-acceleration-ou-easing-en-animation-web","status":"publish","type":"post","link":"https:\/\/jagullo.fr\/blog\/les-courbes-acceleration-ou-easing-en-animation-web\/","title":{"rendered":"Les courbes d&rsquo;acc\u00e9l\u00e9ration ou easing en animation web"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Les fonctions d&rsquo;acc\u00e9l\u00e9ration ou easing functions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dans le domaine de l&rsquo;animation en g\u00e9n\u00e9ral, <strong>une courbe d&rsquo;acc\u00e9l\u00e9ration<\/strong> repr\u00e9sente une fonction math\u00e9matique qui va d\u00e9finir la variation de la vitesse d&rsquo;un mouvement sur un temps donn\u00e9. Il existe une certaine nomenclature des principales fonctions d&rsquo;acc\u00e9l\u00e9ration, mais elles peuvent aussi \u00eatre personnalis\u00e9es en fonction des besoins. \u00c0 l&rsquo;inverse d&rsquo;une fonction lin\u00e9aire dont la vitesse est constante tout le long du mouvement, une fonction easing va acc\u00e9l\u00e9rer ou d\u00e9c\u00e9l\u00e9rer soit au d\u00e9but ou \u00e0 la fin de l&rsquo;animation. Cela permet de r\u00e9aliser des effets bien plus sympas visuellement pour les animations web int\u00e9gr\u00e9es au sein de la page HTML.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ces effets de transition peuvent \u00eatre appliqu\u00e9s soit en <strong>JavaScript<\/strong> ou directement en <strong>CSS<\/strong>. Il existe des librairies open source et d&rsquo;autres payantes pour r\u00e9aliser des animations web avec les easing functions qui s&rsquo;appuient sur les courbes de B\u00e9zier. En CSS, on va g\u00e9n\u00e9ralement appliquer l&rsquo;animation sur une classe que l&rsquo;on va ajouter \u00e0 un \u00e9l\u00e9ment en fonction de l&rsquo;interaction de l&rsquo;utilisateur. On peut par exemple afficher un modal ou une sidebar au clic sur un bouton. En JavaScript les animations vont se faire directement sur l&rsquo;attribut style d&rsquo;un \u00e9l\u00e9ment ce qui revient \u00e0 faire du CSS de fa\u00e7on plus dynamique. Des animations bien r\u00e9alis\u00e9es et bien pens\u00e9es dans une page web apportent une forte plus-value et un c\u00f4t\u00e9 dynamique.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2023\/02\/illustration_easing-function.png\" alt=\"\" class=\"wp-image-3491\" width=\"720\" height=\"480\" srcset=\"https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2023\/02\/illustration_easing-function.png 960w, https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2023\/02\/illustration_easing-function-300x200.png 300w, https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2023\/02\/illustration_easing-function-768x512.png 768w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><figcaption class=\"wp-element-caption\">Les courbes de B\u00e9zier en animation d\u00e9finissent le mouvement de l&rsquo;objet<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Les principales fonctions d&rsquo;acc\u00e9l\u00e9ration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Que ce soit en CSS ou en JavaScript, les transitions peuvent s&rsquo;appliquer sur n&rsquo;importe quel \u00e9l\u00e9ment de la page HTML. Il faut d\u00e9finir le mouvement, la dur\u00e9e et le type d&rsquo;acc\u00e9l\u00e9ration que l&rsquo;on souhaite utiliser. Les exemples suivants vont permettre de bien comprendre la diff\u00e9rence entre les mots cl\u00e9s ease, ease-in, etc. Elles s&rsquo;appliquent soit sur la propri\u00e9t\u00e9<strong> transition <\/strong>ou la propri\u00e9t\u00e9<strong> animation<\/strong> et en fonction des mots cl\u00e9s, les valeurs interm\u00e9diaires du mouvement seront diff\u00e9rentes. Toutes les animations des exemples ci-dessous sont d\u00e9finies avec le m\u00eame d\u00e9lai, mais avec une acc\u00e9l\u00e9ration diff\u00e9rente comme on peut le voir dans le code source.<\/p>\n\n\n\n<pre class=\"wp-block-code language-css\"><code>\/* Classe d'animation *\/\n.slide-linear{animation:slide-anim 2s linear infinite;}\n.slide-ease{animation:slide-anim 2s ease infinite;}\n.slide-easein{animation:slide-anim 2s ease-in infinite;}\n.slide-easeout{animation:slide-anim 2s ease-out infinite;}\n.slide-easeinout{animation:slide-anim 2s ease-in-out infinite;}\n.slide-easeinoutcubic{animation:slide-anim 2s cubic-bezier(0.65, 0, 0.35, 1) infinite;}\n\n\/* Fonction d'animation *\/\n@keyframes slide-anim {\n  0% {left:0%;}\n  100% {left:100%;}\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Le mot cl\u00e9 linear<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Comme son nom l&rsquo;indique, cette fonction affiche une animation lin\u00e9aire donc sans acc\u00e9l\u00e9ration. Le mouvement est <strong>constant<\/strong> entre le d\u00e9but et la fin de l&rsquo;animation. Ce n&rsquo;est pas un mot cl\u00e9 \u00e0 utiliser pour faire appara\u00eetre ou dispara\u00eetre un \u00e9l\u00e9ment. Il peut \u00eatre utilis\u00e9 pour changer la couleur d&rsquo;un bloc ou d&rsquo;un background sur une animation plut\u00f4t lente d&rsquo;un objet de la page.<\/p>\n\n\n\n<div class=\"container-div\">\n  <div class=\"div-blue slide-linear\"><\/div>\n<\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Le mot cl\u00e9 ease<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La valeur ease est celle utilis\u00e9e <strong>par d\u00e9faut <\/strong>par les propri\u00e9t\u00e9s CSS si elles ne sont pas d\u00e9finies. Elle permet un mouvement qui va acc\u00e9l\u00e9rer au milieu puis la ralentir sur la fin. Elle ressemble \u00e0 la fonction ease-in-out mais d&rsquo;une fa\u00e7on plus prononc\u00e9e. Elle peut \u00eatre bien \u00e0 utiliser dans un slider pour la transition entre les \u00e9l\u00e9ments au moment ou l&rsquo;utilisateur change de slide.<\/p>\n\n\n\n<div class=\"container-div\">\n  <div class=\"div-blue slide-ease\"><\/div>\n<\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Le mot cl\u00e9 ease-in<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Cette fonction permet <strong>une acc\u00e9l\u00e9ration progressive<\/strong> tout au long du mouvement. L&rsquo;objet va aller de plus en plus vite jusqu&rsquo;\u00e0 la fin de l&rsquo;animation ce qui peut avoir un effet un peu brusque. C&rsquo;est une valeur qui peut \u00eatre utilis\u00e9e pour faire disparaitre un \u00e9l\u00e9ment en jouant sur l&rsquo;opacit\u00e9  au moment o\u00f9 l&rsquo;on souhaite fermer un menu ou une fen\u00eatre modale dans la page.<\/p>\n\n\n\n<div class=\"container-div\">\n  <div class=\"div-blue slide-easein\"><\/div>\n<\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Le mot cl\u00e9 ease-out<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c0 l&rsquo;inverse de la fonction ease-in, la valeur ease-out va <strong>d\u00e9c\u00e9l\u00e9rer le mouvement<\/strong> tout au long du d\u00e9lai. L&rsquo;objet commence son mouvement normalement puis il ralentit jusqu&rsquo;\u00e0 arriver \u00e0 son emplacement d&rsquo;une fa\u00e7on lente. C&rsquo;est une valeur id\u00e9ale pour faire apparaitre un \u00e9l\u00e9ment dans la page car il va venir se poser \u00e0 l&rsquo;endroit ou il doit arriver d&rsquo;une fa\u00e7on tr\u00e8s souple.<\/p>\n\n\n\n<div class=\"container-div\">\n  <div class=\"div-blue slide-easeout\"><\/div>\n<\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Le mot cl\u00e9 ease-in-out<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Enfin la derni\u00e8re <strong>valeur ease-in-out<\/strong> va reprendre le principe de la fonction ease-in coupl\u00e9 \u00e0 du ease-out. Elle va acc\u00e9l\u00e9rer au d\u00e9but et ralentir \u00e0 la fin. Elle ressemble un peu \u00e0 la valeur ease mais d&rsquo;une fa\u00e7on moins prononc\u00e9e d\u00fbt \u00e0 l&rsquo;effet d&rsquo;acc\u00e9l\u00e9ration et de d\u00e9c\u00e9l\u00e9ration. C&rsquo;est un mot cl\u00e9 passe-partout qui peut \u00eatre utilis\u00e9 sur tout type d&rsquo;animation.<\/p>\n\n\n\n<div class=\"container-div\">\n  <div class=\"div-blue slide-easeinout\"><\/div>\n<\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">La fonction cubic-bezier<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Il est aussi possible de d\u00e9finir sa propre fonction d&rsquo;animation avec cubic-bezier(X1, Y1, X2, Y2). Toutes les fonctions vues ci-dessus utilisent en fait cubic-bezier avec des valeurs pr\u00e9d\u00e9finies. Par exemple la valeur ease correspond \u00e0 cubic-bezier(0.25, 0.1, 0.25, 1.0). Le site <a href=\"https:\/\/easings.net\/fr\" target=\"_blank\" rel=\"noreferrer noopener\">easings.net<\/a> liste toutes les fonctions easing que l&rsquo;on peut reproduire avec cubic-bezier. L&rsquo;animation ci-dessous se base sur la valeur <strong>easeInOutCubic<\/strong> qui reprend la valeur ease-in-out de fa\u00e7on plus lente au d\u00e9but et plus rapide \u00e0 la fin du mouvement.<\/p>\n\n\n\n<div class=\"container-div\">\n  <div class=\"div-blue slide-easeinoutcubic\"><\/div>\n<\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Les librairies d&rsquo;animations<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Des librairies open source<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">De nombreuses librairies open source permettent de r\u00e9aliser <strong>des animations interactives<\/strong> dans une page. La plus connue est <strong>jQuery<\/strong> qui facilite grandement les animations en JavaScript. En vanilla JS il existe <strong>Anime.js<\/strong> qui est une librairie tr\u00e8s pouss\u00e9e et qui propose m\u00eame du line drawing ou du morphing de SVG. Enfin la librairie <strong>GreenSock<\/strong>, tr\u00e8s connue par les d\u00e9veloppeurs venant de Flash, propose de nombreuses fonctionnalit\u00e9s, mais elle est payante si on souhaite l&rsquo;int\u00e9grer sur une plateforme accessible par abonnement. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Les transitions en material design<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Les animations CSS dans une page HTML apportent un rendu moderne et dynamique. Le fait de bien comprendre les <strong>easing functions<\/strong> va faciliter l&rsquo;utilisation de sp\u00e9cifications comme le material design de Google afin de mieux r\u00e9aliser les animations et les transitions. Les effets de transitions entre \u00e9l\u00e9ments du <a href=\"https:\/\/m3.material.io\/styles\/motion\/transitions\/transition-patterns\" target=\"_blank\" rel=\"noreferrer noopener\">material design<\/a> sont bas\u00e9es sur l&rsquo;acc\u00e9l\u00e9ration et la d\u00e9c\u00e9l\u00e9ration du mouvement ce qui fait tout son charme. En r\u00e9glant la bonne temporisation entre dur\u00e9e, vitesse et courbe d&rsquo;acc\u00e9l\u00e9ration, on obtient un d\u00e9placement agr\u00e9able et moderne. Les syst\u00e8mes d&rsquo;exploitation comme Android sont beaucoup bas\u00e9s sur les animations que ce soit pour les transitions entre les interfaces que les feedbacks utilis\u00e9s au moment d&rsquo;une interaction.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Que ce soit dans le domaine du web, des applications ou des syst\u00e8mes d&rsquo;exploitation, l&rsquo;animation est au c\u0153ur du design de ces syst\u00e8mes. Elle apporte de la <strong>modernit\u00e9<\/strong> et du <strong>dynamisme<\/strong> dans l&rsquo;interaction et l&rsquo;exp\u00e9rience utilisateur. En utilisant bien les fonctions d&rsquo;acc\u00e9l\u00e9ration sur des animations, on peut r\u00e9aliser des interfaces \u00e0 fortes valeurs ajout\u00e9es. \u00c7a apporte du style pour un code qui n\u2019est au final pas plus compliqu\u00e9, car les mots cl\u00e9s ease, ease-in, etc. simplifient le d\u00e9veloppement. Elles doivent \u00eatre pens\u00e9es de fa\u00e7on efficace sans g\u00eaner l&rsquo;utilisateur dans la navigation du site web.<\/p>\n\n\n\n<style>\n.container-div{position:relative;width:100%;height:25px;}\n.div-blue{position:absolute;width:25px;height:25px;border-radius:15px;background-color:#DE0088;}\n.slide-linear{animation:slide-anim 2s linear infinite;}\n.slide-ease{animation:slide-anim 2s ease infinite;}\n.slide-easein{animation:slide-anim 2s ease-in infinite;}\n.slide-easeout{animation:slide-anim 2s ease-out infinite;}\n.slide-easeinout{animation:slide-anim 2s ease-in-out infinite;}\n.slide-easeinoutcubic{animation:slide-anim 2s cubic-bezier(0.65, 0, 0.35, 1) infinite;}\n@keyframes slide-anim {\n  0% {left:0%;}\n  100% {left:100%;}\n}\n<\/style>\n\n\n\n<link rel=\"stylesheet\" href=\"\/blog\/wp-content\/themes\/Extra-child\/assets\/css\/prism.css\">\n<script src=\"\/blog\/wp-content\/themes\/Extra-child\/assets\/js\/prism.js\"><\/script>\n<div class=\"list-tags\"><a href=\"https:\/\/jagullo.fr\/blog\/tag\/css-sass-less\/\" class=\"link-tag\" title=\"CSS \/ SASS \/ LESS\">CSS \/ SASS \/ LESS<\/a><a href=\"https:\/\/jagullo.fr\/blog\/tag\/html\/\" class=\"link-tag\" title=\"HTML\">HTML<\/a><a href=\"https:\/\/jagullo.fr\/blog\/tag\/javascript\/\" class=\"link-tag\" title=\"JavaScript\">JavaScript<\/a><\/div>","protected":false},"excerpt":{"rendered":"<p>Les fonctions d&rsquo;acc\u00e9l\u00e9ration ou easing functions Dans le domaine de l&rsquo;animation en g\u00e9n\u00e9ral, une courbe d&rsquo;acc\u00e9l\u00e9ration repr\u00e9sente une fonction math\u00e9matique qui va d\u00e9finir la variation de la vitesse d&rsquo;un mouvement sur un temps donn\u00e9. Il existe une certaine nomenclature des principales fonctions d&rsquo;acc\u00e9l\u00e9ration, mais elles peuvent aussi \u00eatre personnalis\u00e9es en fonction des besoins. \u00c0 l&rsquo;inverse [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3491,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[1],"tags":[28,30,33],"class_list":["post-3291","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-graphisme","tag-css-sass-less","tag-html","tag-javascript","et-has-post-format-content","et_post_format-et-post-format-standard"],"_links":{"self":[{"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/posts\/3291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/comments?post=3291"}],"version-history":[{"count":3,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/posts\/3291\/revisions"}],"predecessor-version":[{"id":3497,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/posts\/3291\/revisions\/3497"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/media\/3491"}],"wp:attachment":[{"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/media?parent=3291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/categories?post=3291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/tags?post=3291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}