Cassie Evans PRO
Brighton based front-end dev & designer. disOrganiser @GeneratorBtn. Has a particular fondness for web animation.
send me things!
Front-end Developer at Clearleft
<svg viewBox="0 0 100 100">
<path d="M10 10H90V90H10Z"/>
<circle cx="50" cy="50" r="40"/>
</svg>
👉
.element {
animation-name: fade;
animation-duration: 2s;
}
@keyframes fade {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
.element {
animation-name: first-animation;
animation-duration: 2s;
}
.element-two {
animation-name: second-animation;
animation-duration: 3s;
animation-delay: 2s;
}
.element {
animation-name: first-animation;
animation-duration: 2s;
}
.element-two {
animation-name: second-animation;
animation-duration: 3s;
animation-delay: 2s;
}
.element {
animation-name: first-animation;
animation-duration: 2s;
}
.element-two {
animation-name: second-animation;
animation-duration: 3s;
animation-delay: 2s;
}
.element-three {
animation-name: second-animation;
animation-duration: 3s;
}
.element {
animation-name: first-animation;
animation-duration: 2s;
}
.element-two {
animation-name: second-animation;
animation-duration: 3s;
animation-delay: 2s;
}
.element-three {
animation-name: third-animation;
animation-duration: 3s;
animation-delay: 5s;
}
.element {
animation-name: first-animation;
animation-duration: 2s;
}
.element-two {
animation-name: second-animation;
animation-duration: 3s;
animation-delay: 2s;
}
.element-three {
animation-name: third-animation;
animation-duration: 3s;
animation-delay: 5s;
}
.element-four {
animation-name: fourth-animation;
animation-duration: 4s;
animation-delay: 8s;
}
.element-five {
animation-name: fifth-animation;
animation-duration: 12s;
animation-delay: 2s;
}
.element-six {
animation-name: sixth-animation;
animation-duration: 3s;
animation-delay: 14s;
}
.element {
animation-name: first-animation;
animation-duration: 2s;
}
.element-two {
animation-name: second-animation;
animation-duration: 3s;
animation-delay: 2s;
}
.element-three {
animation-name: third-animation;
animation-duration: 3s;
animation-delay: 5s;
}
.element-four {
animation-name: fourth-animation;
animation-duration: 4s;
animation-delay: 8s;
}
.element-five {
animation-name: fifth-animation;
animation-duration: 12s;
animation-delay: 2s;
}
.element-six {
animation-name: sixth-animation;
animation-duration: 3s;
animation-delay: 14s;
}
@supports (transform-box: fill-box) {
/*animation code here*/
}
💜
💜
💜
💜
💜
😔
💜
💜
💜
💜
💜
😔
💜
💜
💜
6kb
9kb - 36kb
15kb
💜
💜
😔
💜
💜
💜
6kb
15kb
.....
💜
💜
😔
💜
💜
💜
MIT
MIT
Mostly Free
6kb
15kb
.....
💜
💜
😔
💜
💜
💜
Docs & codepens
Docs & codepens
Docs, forums & codepens
MIT
MIT
Mostly Free
6kb
15kb
.....
TweenMax.method(element, duration, vars)
TweenMax.to(element, duration, vars)
TweenMax.from(element, duration, vars)
TweenMax.from(".cat", duration, vars)
TweenMax.from(".cat",2, vars)
TweenMax.from(".cat",2,{xPercent: 250})
TweenMax.from(".cat",2,{xPercent: 250})
Timeline.from(".cat",2,{xPercent: 250});
Timeline = new TimelineMax();
Timeline.to(".arm",2,{rotation: -60});
Timeline.from(".mic",2,{yPercent: 30});
Timeline.from(".cat",2,{xPercent: 250})
Timeline = new TimelineMax();
.to(".arm",2,{rotation: -60})
.from(".mic",2,{yPercent: 30})
Timeline.from(".cat",2,{xPercent: 250},1)
Timeline = new TimelineMax();
.to(".arm",2,{rotation: -60},"-=1")
.from(".mic",2,{yPercent: 30},"Label")
Timeline.from(".cat",2,{xPercent: 250},1)
Timeline = new TimelineMax();
.to(".arm",2,{rotation: -60},"-=1")
.from(".mic",2,{yPercent: 30},"Label+=2")
Timeline.timeScale(1.5)
Timeline.play()
Timeline.pause()
Timeline.reverse()
image-rendering: pixelated
chrome://flags/#enable-experimental-web-platform-features
chrome://flags/#enable-experimental-web-platform-features
const findFace = async () => {
const myWebcamFeed = document.querySelector('.player');
const faceDetector = new FaceDetector();
try {
const faces = await faceDetector.detect(myWebcamFeed);
console.log(faces);
} catch (error) {
console.log("oops, something went wrong with face detection")
};
}
chrome://flags/#enable-experimental-web-platform-features
const findFace = async () => {
const myWebcamFeed = document.querySelector('.player');
const faceDetector = new FaceDetector();
try {
const faces = await faceDetector.detect(myWebcamFeed);
console.log(faces);
} catch (error) {
console.log("oops, something went wrong with face detection")
};
}
chrome://flags/#enable-experimental-web-platform-features
const findFace = async () => {
const myWebcamFeed = document.querySelector('.player');
const faceDetector = new FaceDetector();
try {
const faces = await faceDetector.detect(myWebcamFeed);
console.log(faces);
} catch (error) {
console.log("oops, something went wrong with face detection")
};
}
chrome://flags/#enable-experimental-web-platform-features
const findFace = async () => {
const myWebcamFeed = document.querySelector('.player');
const faceDetector = new FaceDetector();
try {
const faces = await faceDetector.detect(myWebcamFeed);
console.log(faces);
} catch (error) {
console.log("oops, something went wrong with face detection")
};
}
{
boundingBox: {
x: 545,
y: 187,
top: 187,
left: 545,
right: 855,
bottom: 497,
width: 310,
height: 310
},
landmarks: [
{
locations: { x: 627.5, y: 262.5 },
type: 'eye'
},
{
locations: { x: 763, y: 258 },
type: 'eye'
},
{
locations: { x: 701, y: 418 },
type: 'mouth',
}
}
}
{
boundingBox: {
x: 545,
y: 187,
top: 187,
left: 545,
right: 855,
bottom: 497,
width: 310,
height: 310
},
landmarks: [
{
locations: { x: 627.5, y: 262.5 },
type: 'eye'
},
{
locations: { x: 763, y: 258 },
type: 'eye'
},
{
locations: { x: 701, y: 418 },
type: 'mouth',
}
}
}
👀
👀
👄
@cassiecodes - twitter & codepen
By Cassie Evans
Slides to go along with my talk for smashing TV https://www.smashingmagazine.com/smashing-tv/
Brighton based front-end dev & designer. disOrganiser @GeneratorBtn. Has a particular fondness for web animation.