【问题标题】:Animation stop with css3动画停止用 css3
【发布时间】:2013-11-12 12:06:21
【问题描述】:

目前我正在处理带有滑块动画的标题(仅限 css3):

http://jimmytenbrink.nl/slider/

一切正常,但有时如果您从中心向右移动,滑块会出现问题。看来我需要停止动画几毫秒才能完成。但是我在互联网上到处搜索,但我似乎无法让它工作。

这里有谁有这方面的经验可以帮助我吗?

HTML

<header>
  <div><span>slide 1</span></div>
  <div><span>slide 2</span></div>
  <div><span>slide 3</span></div>
  <div><span>slide 4</span></div>
  <div><span>slide 5</span></div>
  <div><span>slide 6</span></div>
  <div><span>slide 7</span></div>
  <div><span>slide 8</span></div>    
</header>

CSS

header {
    margin-top: 10px;
    width: 800px;
    overflow: hidden;
    height: 500px;
}
header div {
    background-color: #000;
    width: 43.8px;
    height: 200px;
    position: relative;
    float: left;
    -webkit-transition: width .3s;
    transition: width .3s;
    overflow: hidden;
    -webkit-animation-timing-function: linear;
    -webkit-animation-iteration-count: 1;
    -webkit-animation-fill-mode: forwards;
    margin-right: 2px;
}
header div:first-child {
    margin-left: 0px;
}
header div:last-child {
    margin-right: 0px;
}
header div:hover span {
    left: 50px;
    opacity: 1;
}
header div img {
    position: relative;
    left: -240px;
    -webkit-transition: all .3s;
    transition: all .3s;
    -webkit-filter: grayscale(1);
    overflow:hidden;
}
header div span {
    -webkit-transition: left .3s;
    transition: left .3s;
    position: absolute;
    bottom: 30px;
    color: white;
    left: -350px;
    opacity: 0;
    width: 450px;
    font-family:'Fugaz One', cursive;
    text-transform: uppercase;
    font-size: 24px;
    color: #fff;
    text-shadow: 0px 0px 10px #f1f1f1;
    filter: dropshadow(color=#f1f1f1, offx=0, offy=0);
}
header:hover > div {
    width: 43.8px;
}
header:hover > div:hover {
    width: 150px;
}

Here is a JSFiddle

所以问题是,我怎样才能让动画停止几毫秒,这样动画才能在再次触发之前完成?

希望我的问题很清楚!

(感谢编辑)

【问题讨论】:

  • 您是否尝试使用transition 属性进行切换?目前它的0.3s。如果你增加它,你可能会更接近你所需要的..

标签: css animation


【解决方案1】:

有人可能会将我的回答称为解决方法。也许是这样,但根据我对 ExtPro's answer 的评论 - 它仍然是完全纯 CSS。
我决定使用display: table-cell,因为表格单元格的宽度是均匀分布的。

因此,CSS 可能如下所示:
提示:这只是一堆必要的 CSS。所有代码都在jsFiddle中

header {
    width: 368px;
    display: table;
    overflow: hidden;
}
header > div {
    width: 44px;
    height: 200px;
    position: relative;
    -webkit-transition: width .3s;
    transition: width .3s;
    display: table-cell;
    overflow: hidden;
}
header > div:hover {
    width: 151px;
}

Fiddle

如您所见,我们不必确定所有 非悬停 div 的宽度。实际上,问题出在那个 CSS 规则上:

/* DON'T USE THIS RULE - IT'S THE RULE WHICH WAS BAD */
header:hover > div {
    width: 43.8px;
}

您正在更改 header:hover 上 div 的宽度,因此当转换未能及时完成工作时,您的鼠标指向标题而不是 的 div。

【讨论】:

  • 您必须进行一些小的修改才能使解决方案在您的生产站点上正常工作(图像而不是跨度、不同的宽度等),但我认为您现在有了大局。
  • 刚刚进行了修改,您可以在此处查看新的工作版本(感谢您:D):jimmytenbrink.nl/slider
【解决方案2】:

如果我理解您所说的“窃听”的意思,那么如果您将鼠标快速向右移动,它会遍历当前打开的 div 并留在该 div 折叠时不包含 (例如,鼠标没有悬停在下一个以展开它 - 即以下 div(s) 的悬停事件未触发,因此它们不会展开。恐怕不会有 CSS 修复,因为它与浏览器相关,你可能想用 jQuery/JS 替换。

【讨论】:

  • 我不能同意你的看法。现在我正在准备一个可用的纯 CSS 解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 2011-09-27
  • 1970-01-01
  • 2016-07-11
  • 2013-08-03
相关资源
最近更新 更多