前端动画库
admin
2024-03-26 06:10:26
0

目录

  • 一、CSS动画库
    • HOVER.CSS
    • Animate.css
    • Magic.css
  • 二、JS动画库
    • JQuery.transit
    • AnimeJS(很好用)
      • 2.1AnimeJS简单使用
      • anime( config : [ Object ])
      • targets
      • direction:交替方式
      • easing:缓冲
      • property parameters(属性参数)
      • properties
        • Object
      • loop: 持续播放 type:Boolean
      • autoplay:自动播放
      • value特殊写法
      • 细节动画
      • 动画控制(实例API)
        • 播放/暂停
        • 重新开始
        • 倒退播放
      • 回调函数 & Promise
        • update:更新时的回调
        • begin & complete:开始和完成的回调函数
        • loopBegin & loopComplete:循环开始和完成的回调函数
        • change:改变时的回调函数
        • changeBegin & changeComplete:改变开始和完成的回调函数
        • finished Promise 完成时的回调函数

一、CSS动画库

HOVER.CSS

链接: http://ianlunn.github.io/Hover/

install: npm install hover.css --save

文档: https://www.npmjs.com/package/hover.css#downloadinstall

Animate.css

链接: https://animate.style/

install: yarn add animate.css

Magic.css

链接: https://www.minimamente.com/project/magic/

install: yarn add magic.css

文档: https://www.npmjs.com/package/magic.css

动画效果: https://www.jq22.com/yanshi2754

二、JS动画库

JQuery.transit

文档: https://animate.style/

install: npm install --save jquery.transit

AnimeJS(很好用)

链接: https://animejs.com/

install: npm install animejs --save

补充文档: https://www.npmjs.com/package/animejs

2.1AnimeJS简单使用

安装:

npm install animejs --save    yarn add animejs

引入:

import animejs from "animejs/lib/anime.es.js"
const anime = require('animejs');

anime( config : [ Object ])

语法

anime({targets:"#target1 .target2",druation:1000,easing:'easeInOutQuad',direction:'alternate'
})

targets

targts 动画目标

targets类型:

CSS选择器、Dom/NodeList、Object、Array[types[]:CSS选择器 || Dom/NodeList || Object]

//选两个特殊的目标类型做个例子
//Object
const lv={value:0,count:0
}
anime({targets:lv,value:100,count:10,round:1,//应该是动画动的时候进行四舍五入update:()=>{//do something}
})
//Array
const nv=['.el', domNode, jsObject]
anime({targets: nv,translateX: 250
});

direction:交替方式

DIRECTION 表示交替方式

参数

  • normal: 动画向前播放。当它到达结尾时,它会从第一个关键帧重新开始。
  • reverse: 从最后一个关键帧开始,在第一个关键帧结束
  • alternate: 动画先向前播放,然后向后播放:

easing:缓冲

easing 表示动画缓冲

可取值:

  • linear: linear

  • penner函数

INOUTIN-OUTOUT-IN
'easeInQuad''easeOutQuad''easeInOutQuad''easeOutInQuad'
'easeInCubic''easeOutCubic''easeInOutCubic''easeOutInCubic'
'easeInQuart''easeOutQuart''easeInOutQuart''easeOutInQuart'
'easeInQuint''easeOutQuint''easeInOutQuint''easeOutInQuint'
'easeInSine''easeOutSine''easeInOutSine''easeOutInSine'
'easeInExpo''easeOutExpo''easeInOutExpo''easeOutInExpo'
'easeInCirc''easeOutCirc''easeInOutCirc''easeOutInCirc'
'easeInBack''easeOutBack''easeInOutBack''easeOutInBack'
'easeInBounce''easeOutBounce''easeInOutBounce''easeOutInBounce'
var demoContentEl = document.querySelector('.penner-equations-demo');
var fragment = document.createDocumentFragment();
var easingNames = ['easeInQuad','easeInCubic','easeInQuart','easeInQuint','easeInSine','easeInExpo','easeInCirc','easeInBack','easeOutQuad','easeOutCubic','easeOutQuart','easeOutQuint','easeOutSine','easeOutExpo','easeOutCirc','easeOutBack','easeInBounce','easeInOutQuad','easeInOutCubic','easeInOutQuart','easeInOutQuint','easeInOutSine','easeInOutExpo','easeInOutCirc','easeInOutBack','easeInOutBounce','easeOutBounce','easeOutInQuad','easeOutInCubic','easeOutInQuart','easeOutInQuint','easeOutInSine','easeOutInExpo','easeOutInCirc','easeOutInBack','easeOutInBounce',
]function createEasingDemo(easing) {var demoEl = document.createElement('div');demoEl.classList.add('el', 'square', 'stretched', 'easing-'+easing);anime({targets: demoEl,translateY: [50, -50],direction: 'alternate',loop: true,delay: 100,endDelay: 100,duration: 1000,easing: easing});fragment.appendChild(demoEl);
}easingNames.forEach(function(easeName) {createEasingDemo(easeName);
});demoContentEl.innerHTML = '';
demoContentEl.appendChild(fragment);

了解其他值可以访问这里,

property parameters(属性参数)

  • duration: 持续时间 type: Number

  • delay: 延迟 type: Number || Object

  • endDelay: 最后延迟 type: Number || Object

  • round: 将动画值舍入为1位小数 type: Number

properties

样式变化

CSS样式:大多数CSS都可以做动画

Transforms:

属性名单位
'translateX''px'
'translateY''px'
'translateZ''px'
'rotate''deg'
'rotateX''deg'
'rotateY''deg'
'rotateZ''deg'
'scale'
'scaleX'
'scaleY'
'scaleZ'
'skew''deg'
'skewX''deg'
'skewY''deg'
'perspective''px'

Object

当目标值是Object时,他的变化主要是由属性自身引起的

properties Type:String||Object||function

如果值是func的话,他的参数将是下面这几个

ARGUMENTSINFOS
targetThe curent animated targeted element
indexThe index of the animated targeted element
targetsLengthThe total number of animated targets
anime({targets: '.function-based-params-demo .el',translateX: 270,direction: 'alternate',loop: true,delay: function(el, i, l) {return i * 100;},endDelay: function(el, i, l) {return (l - i) * 100;}
});

loop: 持续播放 type:Boolean

autoplay:自动播放

value特殊写法

1、计算

anime({targets: '.el.relative-values',translateX: {value: '*=2.5', // 100px * 2.5 = '250px'duration: 1000},width: {value: '-=20px', // 28 - 20 = '8px'duration: 1800,easing: 'easeInOutSine'},rotate: {value: '+=2turn', // 0 + 2 = '2turn'duration: 1800,easing: 'easeInOutSine'},direction: 'alternate'
});

2、范围:最终会在100到250之间移动

anime({targets: '.el.from-to-values',translateX: [100, 250], // from 100 to 250delay: 500,direction: 'alternate',loop: true
});

3、添加动画方式

var colorsExamples = anime.timeline({endDelay: 1000,easing: 'easeInOutQuad',direction: 'alternate',loop: true
})
.add({ targets: '.color-hex',  background: '#FFF' }, 0)
.add({ targets: '.color-rgb',  background: 'rgb(255,255,255)' }, 0)
.add({ targets: '.color-hsl',  background: 'hsl(0, 100%, 100%)' }, 0)
.add({ targets: '.color-rgba', background: 'rgba(255,255,255, .2)' }, 0)
.add({ targets: '.color-hsla', background: 'hsla(0, 100%, 100%, .2)' }, 0)
.add({ targets: '.colors-demo .el', translateX: 270 }, 0);

细节动画

anime({targets: '.property-keyframes-demo .el',translateX: [{ value: 250, duration: 1000, delay: 500 },{ value: 0, duration: 1000, delay: 500 }],translateY: [{ value: -40, duration: 500 },{ value: 40, duration: 500, delay: 1000 },{ value: 0, duration: 500, delay: 1000 }],scaleX: [{ value: 4, duration: 100, delay: 500, easing: 'easeOutExpo' },{ value: 1, duration: 900 },{ value: 4, duration: 100, delay: 500, easing: 'easeOutExpo' },{ value: 1, duration: 900 }],scaleY: [{ value: [1.75, 1], duration: 500 },{ value: 2, duration: 50, delay: 1000, easing: 'easeOutExpo' },{ value: 1, duration: 450 },{ value: 1.75, duration: 50, delay: 1000, easing: 'easeOutExpo' },{ value: 1, duration: 450 }],easing: 'easeOutElastic(1, .8)',loop: true
});

动画控制(实例API)

播放/暂停

var animation = anime({});
//播放
animation.play()
//暂停
animation.pause()

重新开始

var animation = anime({});
//重新开始
animation.restart()

倒退播放

var animation = anime({});
//倒退播放
animation.reverse()

回调函数 & Promise

update:更新时的回调

var updates = 0;anime({targets: '.update-demo .el',translateX: 270,delay: 1000,direction: 'alternate',loop: 3,easing: 'easeInOutCirc',update: function(anim) {updates++;progressLogEl.value = 'progress : '+Math.round(anim.progress)+'%';updateLogEl.value = 'updates : '+updates;}
});

begin & complete:开始和完成的回调函数

anime({targets: '.begin-complete-demo .el',translateX: 240,delay: 1000,easing: 'easeInOutCirc',update: function(anim) {progressLogEl.value = 'progress : ' + Math.round(anim.progress) + '%';beginLogEl.value = 'began : ' + anim.began;completeLogEl.value = 'completed : ' + anim.completed;},begin: function(anim) {beginLogEl.value = 'began : ' + anim.began;},complete: function(anim) {completeLogEl.value = 'completed : ' + anim.completed;}
});

loopBegin & loopComplete:循环开始和完成的回调函数

var loopBegan = 0;
var loopCompleted = 0;anime({targets: '.loopBegin-loopComplete-demo .el',translateX: 240,loop: true,direction: 'alternate',easing: 'easeInOutCirc',loopBegin: function(anim) {loopBegan++;beginLogEl.value = 'loop began : ' + loopBegan;},loopComplete: function(anim) {loopCompleted++;completeLogEl.value = 'loop completed : ' + loopCompleted;}
});

change:改变时的回调函数

var changes = 0;anime({targets: '.change-demo .el',translateX: 270,delay: 1000,endDelay: 1000,direction: 'alternate',loop: true,easing: 'easeInOutCirc',update: function(anim) {progressLogEl.value = 'progress : '+Math.round(anim.progress)+'%';},change: function() {changes++;changeLogEl.value = 'changes : ' + changes;}
});

changeBegin & changeComplete:改变开始和完成的回调函数

var changeBegan = 0;
var changeCompleted = 0;anime({targets: '.changeBegin-chnageComplete-demo .el',translateX: 240,delay: 1000,endDelay: 1000,loop: true,direction: 'alternate',easing: 'easeInOutCirc',update: function(anim) {progressLogEl.value = 'progress : '+Math.round(anim.progress)+'%';},changeBegin: function(anim) {changeBegan++;beginLogEl.value = 'change began : ' + changeBegan;},changeComplete: function(anim) {changeCompleted++;completeLogEl.value = 'change completed : ' + changeCompleted;}
});

finished Promise 完成时的回调函数

var progressLogEl = document.querySelector('.promise-demo .progress-log');
var promiseEl = document.querySelector('.promise-demo .el');
var finishedLogEl = document.querySelector('.promise-demo .finished-log');
var demoPromiseResetTimeout;function logFinished() {anime.set(finishedLogEl, {value: 'Promise resolved'});anime.set(promiseEl, {backgroundColor: '#18FF92'});
}var animation = anime.timeline({targets: promiseEl,delay: 400,duration: 500,endDelay: 400,easing: 'easeInOutSine',update: function(anim) {progressLogEl.value = 'progress : '+Math.round(anim.progress)+'%';}
}).add({translateX: 250
}).add({scale: 2
}).add({translateX: 0
});animation.finished.then(logFinished);

相关内容

热门资讯

为什么海里都是水啊 为什么海里都是水啊海里没水 海就不叫海了不难怎么叫海水 嘿嘿。海里没水 海就不叫海了
14岁两个女生,一米深的河里手... 14岁两个女生,一米深的河里手绑手溺亡,疑点重重,怎么回事?这个是因为她们忍受不了家里面的重男轻女,...
帮解几道五年级数学题!急急急~... 帮解几道五年级数学题!急急急~快快快!(要解)52=2*2*13
问候幽默语 问候幽默语问候语幽默就应该问他开心快乐每一天,今天岁数是过的,又是非常的快乐的一天,非常充实。你现在...
想来其中自多情,你可知我意难平... 想来其中自多情,你可知我意难平何解!跟你说这句话的人想告诉你,他对你很用心用情,可是你却不在意,或许...
火影忍者所有op对应的集数 火影忍者所有op对应的集数一共9+20首。Naruto:“R★O★C★K★S”,第1至25集。“遥か...
求一本女主角很美好的名著 求一本女主角很美好的名著希望女主角内向些 大家认识的最善良 甜美的女主角 都推荐给我吧书最好是名著 ...
书名中带有 学生 的小说 书名中带有 学生 的小说富的生命。 “美”是生活的更新者,元气之恢复,健康之促进者,甚至可以说是生机...
开在上海乐高乐园里的比亚迪驾驶... ①首家:比亚迪与上海乐高乐园度假区达成的是战略合作伙伴关系,也是乐高乐园在全球合作的首个中国汽车品牌...
原创 林... 自从步入婚姻殿堂、迎来小宝贝后,林志玲的工作节奏悄然放慢,感觉她就像夏日的蜗牛,慢悠悠地享受生活。不...
武汉口碑最好的旅行社排名,靠谱... 在武汉这座充满魅力的城市,旅游市场蓬勃发展,旅行社众多,让人眼花缭乱。对于计划出游的朋友来说,选择一...
我是上海人,去了趟天津,有6点... 作为一个土生土长的上海人,我一直对北方城市充满好奇。上个月趁着年假,我独自踏上了天津之旅。本以为同为...
2025中国(青岛)-东盟经贸... 7月3日至5日,以“蓝色伙伴共赢未来”为主题的2025中国(青岛)-东盟经贸合作与人文交流活动在青岛...
开业首日600余人涌入“桃花源... “桃花源漂流”将速度与清凉完美融合。 连日高温,催热避暑经济,2025建德“17℃夏日漂流季”7月...
中盛旅投文化发展(北京)有限公... 中盛旅投文化发展(北京)有限公司:自然与现代交融 在这个世界上,自然与现代的交融总是能创造出令人惊叹...
在哈利波特与混血王子中,为什么... 在哈利波特与混血王子中,为什么罗恩在吃饭时自己头上会下雪才不是,才不是因为巴不得分手高兴所以挥舞魔杖...
八月第二周(8.6~8.12日... 八月第二周(8.6~8.12日)会得到月老牵线,桃花运降临的星座究竟是谁?八月第二周桃花运很好的星座...
足球1x2是什么意思出款多快? 足球1x2是什么意思出款多快?功能介绍: 游戏趣味变声,在游戏语音时,对您输入的声音进行处理,进行...
虚度半生事无为,轮回一世多悲忧... 虚度半生事无为,轮回一世多悲忧,不怨世人笑我痴,只恨自苦三钱命,啥意思虚度半生事无为,轮回一世多悲忧...
写人作文的方法和技巧 写人作文的方法和技巧写人作文的方法和技巧如下:1、肖像描写(外貌描写)通过对容貌、神情、姿态、服饰、...