有没有可能在页面加载时使用CSS3过渡动画而不使用JavaScript?
这就是我想要的,但是在页面加载时:
目前我找到的是
- CSS3 transition-delay,一种延迟元素效果的方法。仅适用于鼠标悬停。
- CSS3 Keyframe,在加载时有效,但速度极慢,因此不实用。
- CSS3 transition足够快,但不会在页面加载时进行动画处理。
有没有可能在页面加载时使用CSS3过渡动画而不使用JavaScript?
这就是我想要的,但是在页面加载时:
目前我找到的是
你可以在页面加载时运行一个CSS动画,而不需要使用任何JavaScript;你只需要使用CSS3 Keyframes。
这是一个使用CSS3的导航菜单滑入演示:
@keyframes slideInFromLeft {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(0);
}
}
header {
/* This section calls the slideInFromLeft animation we defined above */
animation: 1s ease-out 0s 1 slideInFromLeft;
background: #333;
padding: 30px;
}
/* Added for aesthetics */ body {margin: 0;font-family: "Segoe UI", Arial, Helvetica, Sans Serif;} a {text-decoration: none; display: inline-block; margin-right: 10px; color:#fff;}
<header>
<a href="#">Home</a>
<a href="#">About</a>
<a href="#">Products</a>
<a href="#">Contact</a>
</header>
这里重要的部分是我们称之为slideInFromLeft
的关键帧动画...
@keyframes slideInFromLeft {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(0);
}
}
这句话的意思是“一开始,标题将完全超出屏幕左边缘,到最后将在原位”。
第二部分调用了名为slideInFromLeft
的动画:
animation: 1s ease-out 0s 1 slideInFromLeft;
以上是简略版本,以下是详细版本以便更清晰:
animation-duration: 1s; /* the duration of the animation */
animation-timing-function: ease-out; /* how the animation will behave */
animation-delay: 0s; /* how long to delay the animation from starting */
animation-iteration-count: 1; /* how many times the animation will play */
animation-name: slideInFromLeft; /* the name of the animation we defined above */
你可以做各种有趣的事情,比如滑动内容或突出显示区域。
只需要很少的Javascript:
window.onload = function() {
document.body.className += " loaded";
}
现在是CSS部分:
.fadein {
opacity: 0;
-moz-transition: opacity 1.5s;
-webkit-transition: opacity 1.5s;
-o-transition: opacity 1.5s;
transition: opacity 1.5s;
}
body.loaded .fadein {
opacity: 1;
}
我知道问题中提到了“无需 JavaScript”,但我认为值得指出的是,有一种简单的解决方案只需要一行 JavaScript 代码。
甚至可以是内联 JavaScript,类似于这样:
<body onload="document.body.className += ' loaded';" class="fadein">
那就是所需的全部JavaScript。
- Ivan Pirogdocument.body.classList.add('loaded')
。 - Vyacheslav Cotrutadocument.body.className += " loaded";
еңЁеҗ‘зҺ°жңүзұ»ж·»еҠ loaded
зұ»ж—¶з•Ҙеҫ®дёҚеӨӘеҶ—й•ҝгҖӮ - Pim Schaaf我认为我已经找到了某种解决方法来解决原始问题 - 不是通过页面“on.load”开始的转换 - 我发现使用不透明度淡入动画具有相同的效果,(我正在寻找与OP相同的东西)。
所以我想在页面加载时将正文从白色(与站点背景相同)淡入到黑色文本颜色 - 而且我只从星期一开始编码,所以我正在寻找“on.load”样式的代码,但还不知道JS - 所以这是对我很有效的代码。
#main p {
animation: fadein 2s;
}
@keyframes fadein {
from { opacity: 0}
to { opacity: 1}
}
不管出于什么原因,这对于 .class
不起作用,只对 #id
起作用(至少在我这儿是这样)。
希望这能有所帮助 - 因为我知道这个网站帮了我很多忙!
CSS仅使用3秒延迟
需要注意以下几点:
代码:
header {
animation: 3s ease-out 0s 1 wait, 0.21s ease-out 3s 1 slideInFromBottom;
}
@keyframes wait {
from { transform: translateY(20px); }
to { transform: translateY(20px); }
}
@keyframes slideInFromBottom {
from { transform: translateY(20px); opacity: 0; }
to { transform: translateY(0); opacity: 1; }
}
<html>
<head>
<!-- Reference your CSS here... -->
</head>
<body>
<!-- A whole bunch of HTML here... -->
<div class="onLoad">OMG, I've loaded !</div>
</body>
</html>
.onLoad
{
-webkit-animation:bounceIn 2s;
}
更简单的解决方案(仍然使用[一行内联]JavaScript):
将此作为body标签:
请注意,body.
或this.
对我无效。只有长的;querySelector
允许使用classList.remove
(Linux Chromium)
<body class="onload" onload="document.querySelector('body').classList.remove('onload')">
body.onload *{ transform: none !important; }
body.onload
上强制执行无变换(使用 :none !important
在所有子元素上),一旦文档加载完成,删除该类以触发您在 CSS 中指定的所有元素上的所有过渡效果。div {
width: fit-content;
}
#rotated {
transform: rotate(-50deg)/* any other transformation */
;
transition: 6s;
}
#translated {
transform: translate(90px)/* any other transformation */
;
transition: 6s;
}
.waitload {
transform: none !important;
}
<div id='rotated' class='waitload'>
rotate after load
</div>
<div id='translated' class='waitload'>
trasnlate after load
</div>
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', init);
function init() {
[...document.querySelectorAll('.waitload')]
.map(e => e.classList.remove('waitload'));
}
</script>
将以下代码添加到您的CSS中以实现淡入动画效果
body{animation: 2s ease-out 0s 1 FadeIn;}
@keyframes FadeIn {
0% {
opacity:0;
}
100% {
opacity:1;
}
}
如果您希望加载速度变慢,可以增加缓慢结束时间。
将其以body的hover开始,它将在鼠标第一次移动屏幕时启动,这通常是到达后不到一秒钟的时间,问题在于当鼠标移出屏幕时,它会反向。
html:hover #animateelementid, body:hover #animateelementid {rotate ....}
这是我能想到的最好的东西:http://jsfiddle.net/faVLX/
全屏显示:http://jsfiddle.net/faVLX/embedded/result/
编辑请看下面的评论:
由于没有悬停功能,因此此功能在任何触摸屏设备上都无法使用,因此用户除非点击它,否则将看不到内容。- Rich Bradshaw
<body class="fadein" onload="this.style.opacity=1">
@Rolf定义了CSS样式"fadein",定义了过渡并将透明度设置为初始状态(即0)。
唯一的问题是,这对SPAN或DIV元素不起作用,因为它们没有可用的onload事件。
import React, { useState, useEffect } from 'react';
import { css } from '@emotion/css'
const Hello = (props) => {
const [loaded, setLoaded] = useState(false);
useEffect(() => {
// For load
setTimeout(function () {
setLoaded(true);
}, 50); // Browser needs some time to change to unload state/style
// For unload
return () => {
setLoaded(false);
};
}, [props.someTrigger]); // Set your trigger
return (
<div
css={[
css`
opacity: 0;
transition: opacity 0s;
`,
loaded &&
css`
transition: opacity 2s;
opacity: 1;
`,
]}
>
hello
</div>
);
};