用雪碧图做精灵动画会有一个问题:
必须通过绝对尺寸获取图片坐标,否则就会出错,大多情况下可能会准备2套图片
在七夕主题中就存在这样一个没有解决的问题,所以在分辨率缩放的情况下,精灵图就显得不对称了。针对这样的情况,我特意研究了下,有2种方案可以解决,一种是基于CSS3的scale处理直接可以让元素缩放,另一种就是通过background-size 让精灵图实现自适应缩放。
背景图自适应方案:
看下通过background-size处理后的效果图,实现了缩放自适应了
background-size: 300% 300%;
右边代码区域,有一张精灵图由3张图组成,现在通过关键帧制作3帧动画,需要写出对应的keyframes的规则,这里需要做背景图的自适应处理,所以需要按照百分比设置坐标。
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <title>圣诞主题</title> <style type="text/css"> .bird { width: 3rem; height: 3rem; top: 10%; position: absolute; z-index: 10; background: url(http://img1.sycdn.imooc.com//55ade1700001b38302730071.png); background-size: 300% 100%; } .birdFly { /*写法1*/ -moz-animation-name: bird-slow; -moz-animation-duration: 400ms; -moz-animation-timing-function: steps(1,start); -moz-animation-iteration-count: infinite; /*写法2*/ -webkit-animation:bird-slow 400ms steps(3) infinite; } </style> </head> <body> 尺寸增加后,精灵图正常 <div class="bird birdFly"></div> </body> <script type="text/javascript"> var docEl = document.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', recalc = function() { //设置根字体大小 docEl.style.fontSize = 20 * (docEl.clientWidth / 320) + 'px'; }; //绑定浏览器缩放与加载时间 window.addEventListener(resizeEvt, recalc, false); document.addEventListener('DOMContentLoaded', recalc, false); </script> </html>