4

我正在创建一系列“窗户”或“狗门”,当它们悬停在上面时,似乎就像狗门一样推回“窗户”。

我已经能够创建狗门关闭的自然效果。它来回摆动几次,然后回到默认位置。

我的问题是,当悬停释放时,我无法找到触发摆动的方法。我知道这是一个逻辑问题,因为我在这里看到了它的示例并使用了关键帧 [这里][2]。我也知道我可以用 javascript 解决这个问题,但我严格遵守这个网站的 CSS。

更新:

这是工作示例。小提琴

谢谢大雄!

HTML:

<ul class="window">
    <li>
        <figure class="door">
            <img src="http://www.ta-sa.org/data/images/laughing_man_big_2.png" alt="">
        </figure>
    </li>
</ul>

CSS:

* {
    list-style: none;



}
.door {
    width: 300px;
    height: 300px;
    margin: 0;
    position: relative;
    perspective:1000px;
    -webkit-perspective:1000px;
    /* Safari and Chrome */
}
.door img {
    background-color: #E8585A;
    width: 100%;
    display: block;
    position: relative;
    transform-origin: top;
    -ms-transform-origin: top;
    /* IE 9 */
    -webkit-transform-origin: top;
    /* Safari and Chrome */
    -moz-animation: swing 2s;
    -webkit-animation: swing 2s;
    animation: swing 2s;
    z-index: 10;
}

.door:hover img {
      transform-origin: top;
    -webkit-transform-origin: top;
    -webkit-transform: rotateX(-60deg);
    -webkit-transition: all .2s;
    background-color: #00a99d;
    -webkit-animation: swing;
    /* Safari and Chrome */
}
@-webkit-keyframes swing {
    0%, 20%, 40%, 60%, 80%, 100% {
        -webkit-transform-origin: top center;
    }
    0% {
        -webkit-transform: rotateX(-60deg);
    }
    20% {
        -webkit-transform: rotateX(-60deg);
    }
    40% {
        -webkit-transform: rotateX(25deg);
    }
    60% {
        -webkit-transform: rotateX(-20deg);
    }
    80% {
        -webkit-transform: rotateX(5deg);
    }
    100% {
        -webkit-transform: rotateX(0deg);
    }
}
4

2 回答 2

5

不错的技术,我不知道悬停在 div 上时可以触发动画!我摆弄了一下,希望即使不如预期的顺利,它也能正常工作,但这可能足以朝着正确的方向更进一步。

这里的问题是 - 我猜 - 你没有声明悬停状态的动画(如你的链接中所建议的那样),而只是一个过渡。所以我尝试为“门”添加一个过渡以在悬停时打开......

.door:hover img {
  transform-origin: top;
  transform: rotateX(-60deg);
  transition: all .2s; 

...以及将在鼠标移出时触发的动画:

   animation: swing;
 }

希望这个小提琴能显示你需要什么,或者至少能以某种方式帮助你。无论如何,我很高兴自己学到了一些新东西,谢谢。

* {
    list-style: none;
    -webkit-transition: all .5s ease-out;
    -moz-transition: all .5s ease-out;
    -o-transition: all .5s ease-out;
    transition: all .5s ease-out;
 
}
*:hover {
    -webkit-transition: all .2s ease-out;
    -moz-transition: all .2s ease-out;
    -o-transition: all .2s ease-out;
    transition: all .2s ease-out;
}
.door {
    width: 300px;
    height: 300px;
    margin: 0;
    position: relative;
    perspective:1000px;
    -webkit-perspective:1000px;
    /* Safari and Chrome */
}
.door img {
    background-color: #E8585A;
    width: 100%;
    display: block;
    position: relative;
    transform-origin: top;
    -ms-transform-origin: top;
    /* IE 9 */
    -webkit-transform-origin: top;
    /* Safari and Chrome */
    -moz-animation: swing 2s;
    -webkit-animation: swing 2s;
    animation: swing 2s;
    z-index: 10;
}

.door:hover img {
      transform-origin: top;
    -webkit-transform-origin: top;
    -webkit-transform: rotateX(-60deg);
    -webkit-transition: all .2s;
    background-color: #00a99d;
    -webkit-animation: swing;
    /* Safari and Chrome */
}
@-webkit-keyframes swing {
    20%, 40%, 60%, 80%, 100% {
        -webkit-transform-origin: top center;
    }
    20% {
        -webkit-transform: rotateX(-60deg);
    }
    40% {
        -webkit-transform: rotateX(25deg);
    }
    60% {
        -webkit-transform: rotateX(-20deg);
    }
    80% {
        -webkit-transform: rotateX(5deg);
    }
    100% {
        -webkit-transform: rotateX(0deg);
    }
}
<ul class="window">
    <li>
        <figure class="door">
            <img src="https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" alt="">
        </figure>
    </li>
</ul>

于 2013-07-25T01:53:59.200 回答
2

我使用:not 伪类让它在 Firefox v22 中工作,如下所示:

工作示例

.door img:not(:hover) {
    transform-origin: top;
    animation: swing 2s;
}

这个伪类组合看起来很糟糕,但它确实有效。

对于 -webkit- 浏览器,动画仍然需要一些工作......

于 2013-07-25T02:33:07.637 回答