Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #33864

Re: CSS transition

From JR <jrfaqcom@gmail.com>
Newsgroups comp.lang.javascript
Subject Re: CSS transition
Date 2017-08-23 07:41 -0300
Organization Aioe.org NNTP Server
Message-ID <onjm41$163j$1@gioia.aioe.org> (permalink)
References <fe80a18f-f772-4375-96d5-8acc749b7b86@googlegroups.com>

Show all headers | View raw


On 22-08-2017 14:59, bit-naughty@hotmail.com wrote:
> I have something which is off-screen, ie. it's "left" is 101% in
> CSS. I'm trying to scroll it in smoothly, but it just *appears*,
> without a slow scroll. This is my JS code:
> 
> var elem = document.getElementById("middleoffscreen");
> elem.style.transition = "left 0.5s linear 0s";	
> elem.style.left = "1%";
> 
> 
> 
> What am I doing wrong?
> 

Firstly, the css style lacks a 'position: absolute' (or relative or 
fixed depending on your case) in order to set / change the element's 
left property.

#middleoffscreen {
   position: absolute;
   left: 101%;
}

Then your code will work as desired:

   var elem = document.getElementById("middleoffscreen");
   elem.style.transition = "left 0.5s linear 0s";
   elem.style.left = "1%";

However, you won't get a smooth animation by changing the 'left' (or 
top, right, bottom) property, because it will trigger a reflow process 
in the browser [1].

So in order to get smooth animations (~ 60 fps), change opacity, 
transform and filter only, besides adding easing functions (ease-in, 
ease-out, etc.). E.g:

CSS:

#middleoffscreen {
   position: absolute;
   left: 101%;
   transition: transform 0.5s ease-out;
}

.transformed {
   transform: translateX(-500px);
}

JS:

var elem = document.getElementById("middleoffscreen");
elem.classList.add('transformed');


Another possibility is using the fresh Web Animations API [2], i.e 
Element.animate(), supported by some modern browsers so far.

function test2() {
   var el = document.getElementById("middleoffscreen");
   var keyframes = [{
     transform: 'translateX(101%)',
     filter: 'blur(40px)',
     opacity: 0
   },
   {
     transform: 'translateX(-700px)',
     filter: 'blur(0)',
     opacity: 1
   }];
   var options = {
     delay: 0,
     endDelay: 0,
     direction: 'alternate',
     duration: 500,
     fill: 'forwards',
     easing: 'ease-out',
   };
   el.animate(keyframes, options);
}


[1] 
<https://www.paulirish.com/2012/why-moving-elements-with-translate-is-better-than-posabs-topleft/>
[2] <https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API>

-- 
Joao Rodrigues

Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

CSS transition bit-naughty@hotmail.com - 2017-08-22 10:59 -0700
  Re: CSS transition Martin Honnen <martin.honnen@gmx.de> - 2017-08-22 21:16 +0200
    Re: CSS transition Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-08-23 03:14 +0200
      Re: CSS transition Martin Honnen <martin.honnen@gmx.de> - 2017-08-23 12:24 +0200
  Re: CSS transition JR <jrfaqcom@gmail.com> - 2017-08-23 07:41 -0300
    Re: CSS transition Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-08-23 14:51 +0200
    Re: CSS transition bit-naughty@hotmail.com - 2017-08-23 23:14 -0700
      Re: CSS transition Joao Rodrigues <groups_jr-1@yahoo.com.br> - 2017-08-25 20:17 -0300

csiph-web