谈谈网页中实现逐帧动画

前言

本文写于2016年\]我们在网页中经常需要一些动画效果,假如你的动画效果需要人为控制停止或者播放,我们一般就不会用gif来实现了!这里,就引出了我们今天讲到的逐帧动画!今天主要讲解几种方式来实现逐帧动画!大家可以根据项目情况来自己选择。功能最强大的要数jquery的[spritely](https://link.juejin.cn?target=http%3A%2F%2Fresource.haorooms.com%2Fsoftshow-29-253-1.html "http://resource.haorooms.com/softshow-29-253-1.html")插件了,具体可以看:[resource.haorooms.com/uploads/dem...](https://link.juejin.cn?target=http%3A%2F%2Fresource.haorooms.com%2Fuploads%2Fdemo%2Fmedia%2Fanimate%2Fspritely%2Findex.html "http://resource.haorooms.com/uploads/demo/media/animate/spritely/index.html") ,文章后面也会讲到! ## css3实现逐帧动画 看如下两个例子: 具体代码如下: ```css #foxtail { background: url(http://sandbox.runjs.cn/uploads/rs/216/0y89gzo2/foxtail.png) 0 0 no-repeat; width: 156px; height: 156px; } @keyframes animate-tail { 0% {background-position: -6864px 0; } 100% {background-position: 0 0;} } #foxtail { animation: animate-tail 3.75s steps(44) infinite; } /** 小孩动画**/ @keyframes run { 0% { background-position: 0 0; } 100% { background-position: -6000px 0; } } @-webkit-keyframes run { 0% { background-position: 0 0; } 100% { background-position: -6000px 0; } } #sprite { width: 75px; height: 90px; background: url("http://sandbox.runjs.cn/uploads/rs/216/0y89gzo2/1-slow.png") 0 0 no-repeat; -webkit-animation: run 1s steps(80) infinite;/*80帧*/ animation: run 1s steps(80) infinite; } ``` 上面的2个动画实现方式是一致的。假如图片几个关键帧(之前用过flash的肯定知道关键帧),位置不一样,用上面的方法可能会跳动。那么我们可以分别来指定位置。只要最后我们用如下: ```css -webkit-animation:动画名字 1s steps(1) infinite; ``` 就可以了。 **注意:steps的使用** ```scss steps 函数指定了一个阶跃函数,第一个参数指定了时间函数中的间隔数量(必须是正整数);第二个参数可选,接受 start 和 end 两个值,指定在每个间隔的起点或是终点发生阶跃变化,默认为 end 比如:steps(1,start)、steps(1,end)或者steps(1) ``` ## jquery插件来实现逐帧动画 我在这里推荐的是jquery的spritely这个插件! 用插件兼容性相对较好,而且功能强大,可以让动画跟随鼠标,可以翻转,可以调整速度等等。 上面的代码我们用jquery插件可以这么写: ```php $("#foxtail").sprite({ fps: 12, no_of_frames: 44 }); $("#sprite").sprite({ fps: 12, no_of_frames: 80 }); ``` 假如要跟随鼠标点击: ```scss $('#sprite').sprite({fps: 12, no_of_frames: 80}).activeOnClick().active(); $('body').flyToTap(); ``` 具体大家可以下载插件看一下! ## js实现 为了防止空白不自然,可以用2个div重叠进行! ```css

#divParent div { width:75px;height:90px;background:url(http://sandbox.runjs.cn/uploads/rs/216/0y89gzo2/1-slow.png) no-repeat scroll 0px 0px transparent; position:absolute; top:0px; left:0px; z-index:1; } ``` js代码如下: ```ini var i = 0; var nowShow = 2; var divParent = document.getElementById("divParent"); window.setInterval(frameAnmi, 26); function frameAnmi() { if (i > 80) { i = 0; } nowShow = (nowShow == 2) ? 1 : 2; var logo = document.getElementById("haorooms" + nowShow); logo.style.backgroundPosition = "-" + i * 75 + "px 0px"; divParent.appendChild(logo); i++; } ``` 这样也可以实现逐帧动画。 关于网页中实现逐帧动画,还有其他方法,我今天就主要介绍主流的这三种!希望大家根据自己实际情况,选择自己适合的场景来使用!

相关推荐
2501_920931704 小时前
React Native鸿蒙跨平台采用ScrollView的horizontal属性实现横向滚动实现特色游戏轮播和分类导航
javascript·react native·react.js·游戏·ecmascript·harmonyos
0思必得06 小时前
[Web自动化] Selenium处理动态网页
前端·爬虫·python·selenium·自动化
东东5166 小时前
智能社区管理系统的设计与实现ssm+vue
前端·javascript·vue.js·毕业设计·毕设
catino6 小时前
图片、文件的预览
前端·javascript
2501_920931708 小时前
React Native鸿蒙跨平台实现推箱子游戏,完成玩家移动与箱子推动,当所有箱子都被推到目标位置时,玩家获胜
javascript·react native·react.js·游戏·ecmascript·harmonyos
layman05288 小时前
webpack5 css-loader:从基础到原理
前端·css·webpack
半桔8 小时前
【前端小站】CSS 样式美学:从基础语法到界面精筑的实战宝典
前端·css·html
AI老李8 小时前
PostCSS完全指南:功能/配置/插件/SourceMap/AST/插件开发/自定义语法
前端·javascript·postcss
_OP_CHEN8 小时前
【前端开发之CSS】(一)初识 CSS:网页化妆术的终极指南,新手也能轻松拿捏页面美化!
前端·css·html·网页开发·样式表·界面美化
啊哈一半醒8 小时前
CSS 主流布局
前端·css·css布局·标准流 浮动 定位·flex grid 响应式布局