来源:未知 时间:2024-06-10 21:33 作者:小飞侠 阅读:次
[导读] 利用css逐帧动画steps实现js可控动画正序播放,倒序播放,暂停 可以鼠标向上倒序,向下正序,点击播放暂停 代码: !DOCTYPEhtmlhtmllang=enheadmetacharset=UTF-8metaname=viewportcontent=width=device-widt...
|
利用css逐帧动画steps实现js可控动画正序播放,倒序播放,暂停 可以鼠标向上倒序,向下正序,点击播放暂停 代码: <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0; padding: 0;
}
body{
width: 100%;
height: 100vh;
}
.main{
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 100vh;
}
.unlock{
width: 66px;
height: 88px;
background-repeat: no-repeat;
background-image: url(./privacy_animated__dbfct2heugsy_medium.png);
background-size: auto;
background-position: 0px 0px;
animation: unlock_animation-large 36s steps(1) forwards;
animation-play-state: paused;
animation-iteration-count: 1;
animation-duration: 36s;
}
@keyframes unlock_animation-large {
0% {
background-position: 0px 0px
}
2.7777777778% {
background-position: -66px 0px
}
5.5555555556% {
background-position: -132px 0px
}
8.3333333333% {
background-position: -198px 0px
}
11.1111111111% {
background-position: -264px 0px
}
13.8888888889% {
background-position: -330px 0px
}
16.6666666667% {
background-position: 0px -88px
}
19.4444444444% {
background-position: -66px -88px
}
22.2222222222% {
background-position: -132px -88px
}
25% {
background-position: -198px -88px
}
27.7777777778% {
background-position: -264px -88px
}
30.5555555556% {
background-position: -330px -88px
}
33.3333333333% {
background-position: 0px -176px
}
36.1111111111% {
background-position: -66px -176px
}
38.8888888889% {
background-position: -132px -176px
}
41.6666666667% {
background-position: -198px -176px
}
44.4444444444% {
background-position: -264px -176px
}
47.2222222222% {
background-position: -330px -176px
}
50% {
background-position: 0px -264px
}
52.7777777778% {
background-position: -66px -264px
}
55.5555555556% {
background-position: -132px -264px
}
58.3333333333% {
background-position: -198px -264px
}
61.1111111111% {
background-position: -264px -264px
}
63.8888888889% {
background-position: -330px -264px
}
66.6666666667% {
background-position: 0px -352px
}
69.4444444444% {
background-position: -66px -352px
}
72.2222222222% {
background-position: -132px -352px
}
75% {
background-position: -198px -352px
}
77.7777777778% {
background-position: -264px -352px
}
80.5555555556% {
background-position: -330px -352px
}
83.3333333333% {
background-position: 0px -440px
}
86.1111111111% {
background-position: -66px -440px
}
88.8888888889% {
background-position: -132px -440px
}
91.6666666667% {
background-position: -198px -440px
}
94.4444444444% {
background-position: -264px -440px
}
97.2222222222% {
background-position: -330px -440px
}
to {
background-position: -330px -440px
}
}
#test{
width: 3px; height: 3px; position: absolute;
background-color: red;
transform: scale(2);
font-size: 11px;
text-wrap: nowrap;
}
#test2 {
}
.testScroll{
position: absolute;
width: 200vw;
height: 20px;
display: block;
}
</style>
</head>
<body>
<div id="test"></div>
<div class="testScroll"></div>
<div class="main">
<div id="test2"></div>
<div class="unlock" id="unlock" style='animation-delay: -6s;'></div>
</div>
<script>
let KeyAnim = function(maxKeys, dom, playSort) {
this.curFrameIndex = 0;
this.maxKeys = maxKeys ? maxKeys : 36;
this.dom = dom ? dom : null;
this.playSort = playSort ? playSort : 'asc';
this.paused = false;
this.bindMouseEvent();
}
KeyAnim.prototype.toDo = function() {
document.querySelector('#test2').innerHTML = '排序:' + this.playSort + ',' + (this.paused === false ? '播放' : '暂停')
if (this.paused) {
return;
}
if (this.playSort === 'asc') {
this.curFrameIndex ++;
if(this.curFrameIndex > this.maxKeys) {
this.curFrameIndex = 0;
}
} else {
this.curFrameIndex --;
if(this.curFrameIndex < 0) {
this.curFrameIndex = this.maxKeys;
}
}
this.setCurDelay();
this.autoPlay();
}
KeyAnim.prototype.autoPlay = function() {
// 动画执行
// requestAnimationFrame(this.toDo.bind(this))
setTimeout(this.toDo.bind(this), 1000/6);
}
KeyAnim.prototype.bindMouseEvent = function() {
document.addEventListener('mousedown', (e) => {
this.paused = !this.paused;
if (!this.paused) {
this.autoPlay();
}
})
document.addEventListener('mousemove', (e) => {
// console.log('e', e.movementX, e.movementY)
let curYinterval = Math.abs(e.movementY);
if(curYinterval > 3) {
this.playSort = e.movementY > 0 ? 'asc' : 'desc';
}
// console.log('e',curYinterval, e.movementY)
document.querySelector('#test').style.left = e.pageX + 'px';
document.querySelector('#test').style.top = e.pageY + 'px';
})
}
KeyAnim.prototype.setCurDelay = function() {
this.dom.setAttribute('style', `animation-delay: -${this.curFrameIndex}s`)
}
document.addEventListener('DOMContentLoaded', function(event) {
console.log("DOM fully loaded and parsed"); // 先打印
let curKeyAnim = new KeyAnim(null, document.querySelector('#unlock'));
curKeyAnim.autoPlay();
console.log(curKeyAnim)
});
</script>
</body>
</html>思路来源: https://blog.csdn.net/weixin_48003149/article/details/128790545 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com