首先,查看这张图片
Gmail 使用这张图片来显示动画表情。
我们如何使用 png 图像显示这样的动画?
如何使用javascript从PNG图像显示动画图像?[像gmail]
IT技术
javascript
image
animation
png
2021-03-14 09:49:36
6个回答
我给你留下一个粗略的例子,所以你可以得到一个起点:
我将使用一个简单的 div 元素,width
以及height
动画图像将具有的 和 png 精灵作为background-image
并background-repeat
设置为no-repeat
需要的 CSS:
#anim {
width: 14px; height: 14px;
background-image: url(https://ssl.gstatic.com/ui/v1/icons/mail/im/emotisprites/wink2.png);
background-repeat: no-repeat;
}
需要标记:
<div id="anim"></div>
诀窍基本上是使用background-position
CSS 属性向上滚动背景图像精灵。
我们需要知道height
动画图像的(知道我们每次向上滚动多少)和滚动多少次(多少帧会有动画)。
JavaScript 实现:
var scrollUp = (function () {
var timerId; // stored timer in case you want to use clearInterval later
return function (height, times, element) {
var i = 0; // a simple counter
timerId = setInterval(function () {
if (i > times) // if the last frame is reached, set counter to zero
i = 0;
element.style.backgroundPosition = "0px -" + i * height + 'px'; //scroll up
i++;
}, 100); // every 100 milliseconds
};
})();
// start animation:
scrollUp(14, 42, document.getElementById('anim'))
编辑:您还可以以编程方式设置 CSS 属性,这样您就不必在页面上定义任何样式,并从上面的示例中创建一个构造函数,这将允许您同时显示多个精灵动画:
用法:
var wink = new SpriteAnim({
width: 14,
height: 14,
frames: 42,
sprite: "https://ssl.gstatic.com/ui/v1/icons/mail/im/emotisprites/wink2.png",
elementId : "anim1"
});
var monkey = new SpriteAnim({
width: 18,
height: 14,
frames: 90,
sprite: "https://ssl.gstatic.com/ui/v1/icons/mail/im/emotisprites/monkey1.png",
elementId : "anim4"
});
执行:
function SpriteAnim (options) {
var timerId, i = 0,
element = document.getElementById(options.elementId);
element.style.width = options.width + "px";
element.style.height = options.height + "px";
element.style.backgroundRepeat = "no-repeat";
element.style.backgroundImage = "url(" + options.sprite + ")";
timerId = setInterval(function () {
if (i >= options.frames) {
i = 0;
}
element.style.backgroundPosition = "0px -" + i * options.height + "px";
i++;
}, 100);
this.stopAnimation = function () {
clearInterval(timerId);
};
}
请注意,我添加了一个stopAnimation
方法,因此您稍后可以通过调用它来停止指定的动画,例如:
monkey.stopAnimation();
在这里检查上面的例子。
CMS 的回答很好,但也有您可能想要使用的APNG(动画 PNG)格式。当然,第一帧(甚至由不支持 APNG 的浏览器显示的帧)应该是“结束”帧,只需指定跳过文件中的第一帧。
将元素的背景图像设置为第一张图像,然后使用 javascript 通过每 x 毫秒更改一次样式来更改图像。
您可以使用 TweenMax 和 stepedEase 缓动:http ://codepen.io/burnandbass/pen/FfeAa 或http://codepen.io/burnandbass/pen/qAhpj, 无论您选择什么:)
其它你可能感兴趣的问题