【问题标题】:play a looping css animation only while scrolling - stop when scrolling stops仅在滚动时播放循环 css 动画 - 滚动停止时停止
【发布时间】:2015-04-09 09:15:29
【问题描述】:

我在一个固定的 div 上有一个连续播放的 CSS 动画。我想让它只在用户滚动时播放并在滚动停止时停止。我是新手,我一生都无法弄清楚。

我的CSS:

.flame {
margin:0 auto;
position:absolute;
width:100px; 
height:136px;
background:url('../images/flame.png') 0px 0px no-repeat;
-webkit-animation: flicker .4s infinite;

@-webkit-keyframes flicker { /* flame pulses */
0% {
    background-position:0px 0px; 
    opacity:.8 
}
    25% {
        background-position:0px 0px;
}
    25.1% {
        background-position:-100px 0px;        
}
    50% {
        background-position:-100px 0px;
        opacity:.4
}
    50.1% {
        background-position:-200px 0px;
}
    75% {
        background-position:-200px 0px;

}
    75.1% {
        background-position:-100px 0px;
}
    100% {
        background-position:-100px 0px;
        opacity:.8
}

我的 HTML:

<div id="flamegroup">
       <div class="flame" id="fl1"></div>
       <div class="flame" id="fl2"></div>
       <div class="flame" id="fl3"></div> 
</div>

【问题讨论】:

  • 我认为没有onscrollstart(和onscrollstop)事件。只是一个onscroll 事件。当然,您可以使用setTimeout 进行自己的开始/停止检测。
  • 我查了一下,发现了这个:w3schools.com/jquerymobile/event_scrollstart.asp 但是你怎么把它和这个动画联系起来呢?

标签: javascript jquery html css


【解决方案1】:

基本上每100ms左右,就需要捕获滚动位置,然后稍等片刻,看看滚动位置有没有变化。如果没有,您可以停止播放动画。示例:

setInterval(function() {
    var tempscroll = $(window).scrollTop();
    setTimeout(function() {
    if (tempscroll == $(window).scrollTop()) {
        $(document.body).removeClass("scrolling");
    } else {
        $(document.body).addClass("scrolling");
    }
    }, 75);

}, 100);

只有当 body 有一个 .scrolling 类时,你的 css 才会应用动画

demo

【讨论】:

  • 谢谢!但它在演示中不起作用,它应该是滚动旋转,对吗?
  • css 没有以 -webkit- 为前缀,所以它只能在 firefox 中使用。您需要为关键帧和动画属性添加前缀才能使其在 safari/chrome 中工作
  • @HarryRobinsob jsfiddle.net/8dpfLs1L/2 也应该在 safari 和 chrome 中工作
猜你喜欢
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 2015-12-26
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 2014-07-14
相关资源
最近更新 更多