digital-theory/js/anime-master/documentation/examples/timeline.html

201 lines
4.9 KiB
HTML
Raw Normal View History

2023-04-21 23:27:42 +02:00
<!DOCTYPE html>
<html>
<head>
<title>Anime timeline | anime.js</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta property="og:title" content="anime.js">
<meta property="og:url" content="https://animejs.com">
<meta property="og:description" content="Javascript Animation Engine">
<meta property="og:image" content="https://animejs.com/documentation/assets/img/icons/og.png">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="anime.js">
<meta name="twitter:site" content="@juliangarnier">
<meta name="twitter:description" content="Javascript Animation Engine">
<meta name="twitter:image" content="https://animejs.com/documentation/assets/img/icons/twitter.png">
<link rel="apple-touch-icon-precomposed" href="../assets/img/social-media-image.png">
<link rel="icon" type="image/png" href="../assets/img/favicon.png" >
<link href="../assets/css/animejs.css" rel="stylesheet">
<link href="../assets/css/documentation.css" rel="stylesheet">
<!-- <script src="../../lib/anime.min.js"></script> -->
<!-- <script src="../assets/js/anime/anime.2.2.0.js"></script> -->
<style>
body {
position: absolute;
width: 100%;
height: 100%;
}
.debug,
.demo {
position: relative;
width: 100%;
height: 50vh;
}
.demo {
display: flex;
flex-wrap: no-wrap;
justify-content: space-around;
align-items: center;
}
.el {
width: 10px;
height: 10px;
background: #FFF;
margin: 10px;
}
.player {
position: relative;
top: 50px;
height: calc(50vh - 50px);
}
.controls {
opacity: 1;
display: flex;
position: absolute;
right: 0;
top: 0;
left: 0;
height: 46px;
padding: 0 10px 0 10px;
background: #000;
color: #FFF;
}
.buttons {
display: flex;
}
.buttons button {
width: 100px;
}
.timeline {
display: flex;
flex-grow: 1;
}
.progress {
flex-grow: 1;
}
</style>
</head>
<body>
<div class="demo">
<div class="el"></div>
<div class="el"></div>
<div class="el"></div>
<div class="el"></div>
<div class="el"></div>
<div class="el"></div>
<div class="el"></div>
</div>
<div class="debug">
<div class="controls">
<div class="buttons">
<button class="play">Play</button>
<button class="pause">Pause</button>
<button class="reverse">Reverse</button>
<button class="restart">Restart</button>
<label>Is reversed : <input class="is-reversed"></input></label>
</div>
<div class="timeline">
<input class="progress" type="range" min="0" max="100" step=".1" value="0">
</div>
</div>
<div class="player"></div>
</div>
</body>
<script type="module">
import anime from '../../src/index.js';
import animePlayer from '../assets/js/anime.player.js'
var els = document.querySelectorAll('.el');
var controlsProgressEl = document.querySelector('.controls .progress');
var isReversedEl = document.querySelector('.is-reversed');
window.tl = anime.timeline({
targets: els,
duration: 800,
delay: function(el, i) { return 75 * i; },
update: function(anim) {
controlsProgressEl.value = anim.progress;
isReversedEl.value = anim.reversePlayback;
},
loopComplete: (a) => console.log('TL loop completed'),
autoplay: true,
easing: 'easeOutQuad',
direction: 'alternate'
});
document.querySelector('.controls .play').onclick = tl.play;
document.querySelector('.controls .pause').onclick = tl.pause;
document.querySelector('.controls .reverse').onclick = tl.reverse;
document.querySelector('.controls .restart').onclick = tl.restart;
tl
.add({
translateY: -100,
scale: 8,
background: '#FF1461',
begin: function() {
console.log('first began')
},
complete: function() {
console.log('first completed')
}
})
.add({
background: '#18FF92',
rotate: 45,
}, '-=400')
.add({
background: '#5A87FF'
}, '-=400')
.add({
background: '#FBF38C',
rotate: 90,
}, '-=400')
.add({
scaleX: 3,
scaleY: .5,
background: '#FBF38C',
begin: function() {
console.log('last began')
},
complete: function() {
console.log('last completed')
}
}, '-=400');
controlsProgressEl.addEventListener('input', function() {
tl.seek(tl.duration * (controlsProgressEl.value / 100));
});
// for (var i = 0; i < els.length; i++) {
// els[i].addEventListener('mouseenter', function() {
// anime.remove(this);
// this.style.backgroundColor = 'red';
// }, false);
// }
// var playerEl = document.querySelector('.player');
//animePlayer(tl, playerEl);
</script>
<!-- <script src="../assets/js/vendors/stats.min.js"></script> -->
</html>