我已经制作了一个标题(欢迎一词),一旦页面加载(onload=""
)就会显示出来。
Fiddle如果下面的代码不起作用。
function animate() {
document.getElementById("mainText").style.width = "100%";
}
#mainText {
margin: 0px;
display: inline-block;
font-size: 100px;
width: 0%;
transition: width 2s;
white-space: nowrap;
overflow: hidden;
text-overflow: clip;
}
<body onload="animate()">
<h1 id="mainText">Welcome</h1>
</body>
CSS和Plain JS工作得很好,但是我想先将“欢迎”这个词首先显示在右侧然后继续移动,所以从e到W,而不是它当前是如何从左到右打开。
我尝试了text align: right;
,但这并没有改变任何内容。
如果解决方案是JS,我最好不要使用任何jQuery。
期望外观的一个例子,即过渡的一半:
答案 0 :(得分:4)
是的,可以使用过渡和位置:
window.onload = function () {
document.querySelector("h1").classList.add("active");
};
h1 {
overflow: hidden;
display: inline-block;
position: relative;
}
h1 .mask {
position: absolute;
transition: all 0.5s linear;
left: 0;
top: 0;
bottom: 0;
right: 0;
background-color: #fff;
}
h1.active .mask {
right: 100%;
}
<h1><span class="mask"></span>Welcome</h1>
我刚写了一篇关于此事的文章 - CSS Transitions & JavaScript for Animated Entry Effects。希望它有用...... :)
答案 1 :(得分:4)
您可以使用clip-path属性剪切元素的某些部分,使其不可见。此属性也可以设置为动画,以便在动画中使用forwards
关键字再次显示该元素,使其保持在“已显示”的最终状态。
inset
获取的顺序为:从顶部,从右侧,从底部,从左侧开始。
#text {
margin: 0;
font-size: 100px;
animation: reveal 2s forwards;
}
@keyframes reveal {
from {
clip-path: inset(0 0 0 100%);
}
to {
clip-path: inset(0 0 0 0);
}
}
<h1 id="text">Welcome</h1>
答案 2 :(得分:3)
一个选项是带有伪元素的transform: translate
,不需要额外的元素。
function animate() {
document.getElementById("mainText").classList.add('show');
}
#mainText {
position: relative;
margin: 0px;
display: inline-block;
font-size: 100px;
white-space: nowrap;
text-overflow: clip;
overflow: hidden;
}
#mainText::after {
content: '';
position: absolute;
left: 0; top: 0;
width: 100%; height: 100%;
background: white;
transition: transform 2s;
}
#mainText.show::after {
transform: translateX(-100%);
}
<body onload="animate()">
<h1 id="mainText">Welcome</h1>
</body>
另一个选项,一个更好的解决方案,使用伪direction
和left
/ width
。
这一个以clip-path
的方式工作,与其背景完全透明,与使用掩盖文本的屏幕相反,并且具有更好的浏览器支持。
function animate() {
document.getElementById("mainText").classList.add('show');
}
body {
background: black;
}
#mainText {
position: relative;
margin: 0px;
display: inline-block;
font-size: 100px;
white-space: nowrap;
color: rgba(0, 0, 0, 0);
}
#mainText::before {
content: attr(data-text);
position: absolute;
left: 100%;
top: 0;
width: 0;
height: 100%;
color: white;
direction: rtl;
overflow: hidden;
transition: left 2s, width 2s;
}
#mainText.show::before {
left: 0;
width: 100%;
}
<body onload="animate()">
<h1 id="mainText" data-text="Welcome">Welcome</h1>
</body>
答案 3 :(得分:2)
像这样的东西
<script type="text/javascript">
function grade(){
var answers = [
0, // Answer for question0
1, // Answer for question1
2 // Answer for question2
];
var flag_ = [];
var hidden_total_questions = document.getElementById('hidden_total_questions');
for(i=0;i<hidden_total_questions.value;i++){
var questions_ = document.getElementsByName('question'+i);
for(que in questions_){
if(questions_[que].checked == true){
if(answers[i]==questions_[que].value){
flag_[i]=1;
break;
}
else{
flag_[i]=2;
break;
}
}
else{
flag_[i]=0;
}
}
if(flag_[i]==0){
alert("Please select answer for "+i+" question.");
}
else if(flag_[i]==2){
alert("Incorrect answer for "+i+" question.");
}
if(flag_[i]==1){
alert("Correct answer for "+i+" question.");
}
}
return false;
}
</script>
&#13;
function animate() {
document.getElementById("overlay").style.width = "0%";
}
&#13;
#mainText {
margin: 0px;
display: inline-block;
font-size: 100px;
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: clip;
}
#overlay{
width: 100%;
position:absolute;
top:0;
left:0;
background:#fff;
transition: width 2s;
height:100%;
}
&#13;
答案 4 :(得分:0)
这将需要在标题顶部有背景的伪元素作为掩码。我只需添加一个类is-active
,而不是改变内联样式。所以相关的所有风格都可以通过CSS设置。
function animate() {
document.getElementById("mainText").className = "is-active";
}
&#13;
#mainText {
margin: 0px;
display: inline-block;
position: relative;
font-size: 100px;
white-space: nowrap;
overflow: hidden;
text-overflow: clip;
}
#mainText:before {
content: '';
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 100%;
background: #FFF;
transition: width 2s;
}
#mainText.is-active:before {
width: 0%;
}
&#13;
<body onload="animate()">
<h1 id="mainText">Welcome</h1>
</body>
&#13;
答案 5 :(得分:0)
我使用Transform: translateX
来达到预期的效果。
在X轴上横向滑动文本横向或水平。
.message {
color: darkred;
font-size: 30px;
display: inline-block;
font-weight: 100;
font-family: sans-serif;
}
.sliding-text-1,
.sliding-text-2,
.sliding-text-3 {
animation-name: slide;
animation-duration: 1s;
animation-timing-function: ease-out;
animation-iteration-count: 1;
animation-fill-mode: forwards;
opacity: 0;
}
.sliding-text-2 {
animation-delay: 2s;
color: darkblue;
}
.sliding-text-3 {
animation-delay: 4s;
color: darkgreen;
}
@keyframes slide {
from {
transform: translateX(200px);
}
to {
transform: translateX(0px);
opacity: 1;
}
}
<h1 class="message sliding-text-1">Hello!</h1>
<h1 class="message sliding-text-2">Thanks for visiting!</h1>
<h1 class="message sliding-text-3">Have a nice day!</h1>