首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用步骤在png序列上的CSS转换

使用步骤在png序列上的CSS转换
EN

Stack Overflow用户
提问于 2014-04-09 12:19:30
回答 1查看 8.2K关注 0票数 5

我正在尝试使用PNG序列来制作动画,它在悬停状态结束时进行转换,并在悬停状态结束时恢复动画。

为此,我使用带有“步骤”定时函数的css转换,如下所示:

代码语言:javascript
复制
transition:background .5s steps(9, end);

看看这个活生生的例子(我用了一个随机的PNG精灵,我在谷歌上搜索过,它不是我实际使用的)

http://jsfiddle.net/MLWL5/

基本上,这是很好的工作,当你盘旋在元素上慢慢。当您快速地上下悬停元素时,当背景图像处于前一个过渡过程的一半时,该转换似乎会触发,然后步骤数将不匹配,这将产生不希望的效果。

我可以使用javascript来触发转换,但是有谁知道是否有CSS唯一的解决方案呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-12 18:44:30

这不是一个完美的解决方案,但你可以让它用动画来处理悬停变化。

动画完成后,如果你没有悬停,它会正常工作,但如果你不快速地悬停,它就不会动了。

CSS

代码语言:javascript
复制
div { width:50px; 
    height:72px;             background:url(http://openbookproject.net/thinkcs/python/english3e/_images/duke_spritesheet.png) left top;
    transition:background 1.5s steps(9, end);
    background-position: 0px top; 
    -webkit-animation: none;
}

div:hover { 
    background-position:-450px top; 
    -webkit-animation: bkg 1.5s steps(9);
    transition: none;

} 

@-webkit-keyframes bkg {
    0% {background-position: 0px top;}
  100% {background-position: -450px top;}
}

CSS演示

以及使用jQuery的解决方案。这一次将动画从它在非悬停时刻的位置倒转过来。它还会重新计算时间,这样就不会慢下来

jQuery

代码语言:javascript
复制
$( "div" ).hover(
    function() {
        var elem = $(this);
        var cur = parseInt(elem.css("background-position-x"));
        var steps = (450 + cur) / 50;
        var time = steps * 0.1;
        var trans = "background " + time + "s steps(" + steps + ", end)";
        elem.css("transition", trans);
        elem.css("background-position", "-450px 0px");
    }, 
    function() {
        var elem = $(this);
        var cur = parseInt(elem.css("background-position-x"));
        var steps = - cur / 50;
        var time = steps * 0.1;
        var trans = "background " + time + "s steps(" + steps + ", end)";
        elem.css("transition", trans);
        elem.css("background-position", "0px 0px");
  }
);

jQuery演示

jQuery代码可以精简一点,使用函数来避免重复代码,但是我已经把它设置得和可执行的一样清晰。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22962329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档