gpt4 book ai didi

javascript - 在显示数组的每个值后向
添加属性

转载 作者:行者123 更新时间:2023-11-28 04:00:13 26 4
gpt4 key购买 nike

我正在显示数组的每个值,就像它被键入一样。在一个值完全显示后,我想要 <div />获取属性( data-textwords[x] ),并在键入下一个值时将其删除。

var words = [
"Apple",
"Car",
"Building",
"Random"
];

var time = 0;

function typeWord(word, time) {
setTimeout(
function() {
$('#id')
.html(word)
},
time
);
}

function writeWords() {
for (x = 0; x < words.length; x++) {
for (y = 0; y <= words[x].length; y++) {
var word = words[x].substr(0, y)
time = time + 50;
typeWord(word, time);
}
time = time + 3000;
}
return time;
}

function toggleClasses() {
$(".text").addClass("hide");
$(".error").removeClass("hide");
}

$(document).ready(function() {
setInterval(toggleClasses, writeWords());
});
* {
margin: 0px;
padding: 0px;
}

body {
background: pink;
height: 100vh;
width: 100vw;
}

.container {
// background: pink;
height: 100%;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
}

.error {
height: 80%;
width: 80%;
max-height: 300px;
max-width: 500px;
border: 1px solid #ccc;
text-align: center;
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
opaciti: 1;
transition: 0.3s ease;
}

.error .errorHeader {
display: flex;
justify-content: center;
}

.error h1 {
font-size: 72px;
color: #20aaff;
font-weight: 700;
}

.error p {
color: white;
}

.text {
color: #20aaff;
font-size: 40px;
font-weight: 300;
position: relative;
text-transform: UPPERCASE;
opacity: 1;
}
@keyframes noise-anim {
0% {
clip: rect(23px, 9999px, 17px, 0);
}

5% {
clip: rect(34px, 9999px, 24px, 0);
}

10% {
clip: rect(34px, 9999px, 9px, 0);
}

15.0% {
clip: rect(20px, 9999px, 22px, 0);
}

20% {
clip: rect(5px, 9999px, 18px, 0);
}

25% {
clip: rect(15px, 9999px, 35px, 0);
}

30.0% {
clip: rect(26px, 9999px, 36px, 0);
}

35% {
clip: rect(26px, 9999px, 33px, 0);
}

40% {
clip: rect(26px, 9999px, 5px, 0);
}

45% {
clip: rect(13px, 9999px, 28px, 0);
}

50% {
clip: rect(29px, 9999px, 38px, 0);
}

55.0% {
clip: rect(30px, 9999px, 13px, 0);
}

60.0% {
clip: rect(7px, 9999px, 36px, 0);
}

65% {
clip: rect(28px, 9999px, 14px, 0);
}

70% {
clip: rect(15px, 9999px, 16px, 0);
}

75% {
clip: rect(8px, 9999px, 8px, 0);
}

80% {
clip: rect(39px, 9999px, 2px, 0);
}

85.0% {
clip: rect(20px, 9999px, 18px, 0);
}

90% {
clip: rect(27px, 9999px, 8px, 0);
}

95% {
clip: rect(33px, 9999px, 14px, 0);
}

100% {
clip: rect(23px, 9999px, 25px, 0);
}
}
.text:after {
content: attr(data-text);
position: absolute;
left: 2px;
text-shadow: -1px 0 red;
top: 0;
color: black;
overflow: hidden;
clip: rect(0, 900px, 0, 0);
animation: noise-anim 2s infinite linear alternate-reverse;
}
@keyframes noise-anim-2 {
0% {
clip: rect(5px, 9999px, 21px, 0);
}

5% {
clip: rect(38px, 9999px, 11px, 0);
}

10% {
clip: rect(37px, 9999px, 18px, 0);
}

15.0% {
clip: rect(11px, 9999px, 38px, 0);
}

20% {
clip: rect(24px, 9999px, 13px, 0);
}

25% {
clip: rect(37px, 9999px, 25px, 0);
}

30.0% {
clip: rect(28px, 9999px, 40px, 0);
}

35% {
clip: rect(14px, 9999px, 33px, 0);
}

40% {
clip: rect(35px, 9999px, 3px, 0);
}

45% {
clip: rect(23px, 9999px, 19px, 0);
}

50% {
clip: rect(7px, 9999px, 18px, 0);
}

55.0% {
clip: rect(18px, 9999px, 15px, 0);
}

60.0% {
clip: rect(14px, 9999px, 31px, 0);
}

65% {
clip: rect(29px, 9999px, 4px, 0);
}

70% {
clip: rect(12px, 9999px, 2px, 0);
}

75% {
clip: rect(3px, 9999px, 38px, 0);
}

80% {
clip: rect(24px, 9999px, 39px, 0);
}

85.0% {
clip: rect(34px, 9999px, 12px, 0);
}

90% {
clip: rect(15px, 9999px, 11px, 0);
}

95% {
clip: rect(10px, 9999px, 14px, 0);
}

100% {
clip: rect(38px, 9999px, 21px, 0);
}
}
.text:before {
content: attr(data-text);
position: absolute;
left: -2px;
text-shadow: 1px 0 blue;
top: 0;
color: #a8d500;
overflow: hidden;
clip: rect(0, 900px, 0, 0);
animation: noise-anim-2 3s infinite linear alternate-reverse;
}
.arrow-up {
width: 0px;
height: 0px;
border-left: 40px solid transparent;
border-right: 40px solid transparent;
border-bottom: 70px solid white;
position: relative;
transform: translateY(15px);
}
.arrow-up:before {
content: "";
height: 0px;
width: 0px;
border-left: 35px solid transparent;
border-right: 35px solid transparent;
border-bottom: 65px solid #20aaff;
position: absolute;
transform: translatex(-50%) translatey(5%);
}
.arrow-up:after {
content: "!";
color: white;
font-size: 50px;
display: block;
position: absolute;
transform: translatex(-50%) translatey(15%);
}

.hide {
opacity: 0;
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<p id="id" class="text">
</p>
<div id="errorId" class="error hide">
<div class="errorHeader">
<div class="arrow-up"></div>
<h1>F%*K</h1>
<div class="arrow-up"></div>
</div>
</div>
</div>

感谢您的宝贵时间,抱歉我的英语不好。

最佳答案

我冒昧地为您编写了几个替代实现。

(function(d){
var text=d.getElementById("id"),
error=d.getElementById("errorId"),
node=text.appendChild(d.createTextNode("")),
time=0,
writer;
["Apple","Car","Building","Random"].forEach(function(word){
setTimeout(function(word){
node.nodeValue=text.dataset.text="";
writer=0;
chars=word.length;
word.split("").forEach(function(char){
writer+=50;
setTimeout(function(char){
node.nodeValue+=char;
},writer,char);
});
setTimeout(function(word){
text.dataset.text=word;
},writer,word);
time+=writer;
},time,word);
time+=3000;
});
setTimeout(function(){
text.classList.add("hide");
error.classList.remove("hide");
},time);
})(document);
*{margin:0px;padding:0px;}
body{
background:pink;
height:100vh;
width:100vw;
}
.container{
align-items:center;
display:flex;
height:100%;
justify-content:center;
width:100%;
}
.text{
color:#20aaff;
font-size:40px;
font-weight:300;
position:relative;
text-transform:uppercase;
}
.text:before{
animation:noise-anim-2 3s infinite linear alternate-reverse;
clip:rect(0,900px,0,0);
color:#a8d500;
content:attr(data-text);
left:-2px;
overflow:hidden;
position:absolute;
text-shadow:1px 0 blue;
top:0;
}
.text:after{
animation:noise-anim 2s infinite linear alternate-reverse;
clip:rect(0,900px,0,0);
color:black;
content:attr(data-text);
left:2px;
position:absolute;
text-shadow:-1px 0 red;
top:0;
overflow:hidden;
}
.error{
align-items:center;
border:1px solid #ccc;
display:flex;
flex-direction:column;
height:80%;
justify-content:space-around;
max-height:300px;
text-align:center;
width:80%;
max-width:500px;
}
.error .errorHeader{
display:flex;
justify-content:center;
}
.error h1{
font-size:72px;
color:#20aaff;
font-weight:700;
text-transform:uppercase;
}
.error p{
color:white;
}
.arrow-up {
width: 0px;
height: 0px;
border-left: 40px solid transparent;
border-right: 40px solid transparent;
border-bottom: 70px solid white;
position: relative;
transform: translateY(15px);
}
.arrow-up:before{
border-left:35px solid transparent;
border-right:35px solid transparent;
border-bottom:65px solid #20aaff;
content:"";
height:0px;
position:absolute;
transform:translate(-50%,5%);
width:0px;
}
.arrow-up:after{
content:"!";
color:white;
display:block;
font-size:50px;
position:absolute;
transform:translate(-50%,15%);
}
.hide{display:none;}
@keyframes noise-anim{0%{clip:rect(23px,9999px,17px,0);}5%{clip:rect(34px,9999px,24px,0);}10%{clip:rect(34px,9999px,9px,0);}15%{clip:rect(20px,9999px,22px,0);}20%{clip:rect(5px,9999px,18px,0);}25%{clip:rect(15px,9999px,35px,0);}30%{clip:rect(26px,9999px,36px,0);}35%{clip:rect(26px,9999px,33px, 0);}40%{clip:rect(26px,9999px,5px,0);}45%{clip:rect(13px,9999px,28px,0);}50%{clip:rect(29px,9999px,38px,0);}55%{clip:rect(30px,9999px,13px,0);}60%{clip:rect(7px,9999px,36px,0);}65%{clip:rect(28px,9999px,14px,0);}70%{clip:rect(15px,9999px,16px,0);}75%{clip:rect(8px,9999px,8px,0);}80%{clip:rect(39px,9999px,2px,0);}85%{clip:rect(20px,9999px,18px,0);}90%{clip:rect(27px,9999px,8px,0);}95%{clip:rect(33px,9999px,14px,0);}100%{clip:rect(23px,9999px,25px,0);}}
@keyframes noise-anim-2{0%{clip:rect(5px, 9999px, 21px, 0);}5%{clip:rect(38px,9999px,11px,0);}10%{clip:rect(37px,9999px,18px,0);}15%{clip:rect(11px,9999px,38px,0);}20%{clip:rect(24px,9999px,13px,0);}25%{clip:rect(37px,9999px,25px,0);}30%{clip:rect(28px,9999px,40px,0);}35%{clip:rect(14px,9999px,33px,0);}40%{clip:rect(35px,9999px,3px,0);}45%{clip:rect(23px,9999px,19px,0);}50%{clip:rect(7px,9999px,18px,0);}55%{clip:rect(18px,9999px,15px,0);}60%{clip:rect(14px,9999px,31px,0);}65%{clip:rect(29px,9999px,4px,0);}70%{clip:rect(12px,9999px,2px,0);}75%{clip:rect(3px,9999px,38px,0);}80%{clip:rect(24px,9999px,39px,0);}85%{clip:rect(34px,9999px,12px,0);}90%{clip:rect(15px,9999px,11px,0);}95%{clip:rect(10px,9999px,14px,0);}100%{clip:rect(38px,9999px,21px,0);}}
<div class="container">
<p id="id" class="text"></p>
<div id="errorId" class="error hide">
<div class="errorHeader">
<div class="arrow-up"></div>
<h1>End</h1>
<div class="arrow-up"></div>
</div>
</div>
</div>

(function(d){
var words=["Apple","Car","Building","Random"],
count=words.length,
text=d.getElementById("id"),
error=d.getElementById("errorId"),
node=text.appendChild(d.createTextNode("")),
chars,time,word,y;
(function write(x){
if(x===count){
text.classList.add("hide");
error.classList.remove("hide");
return;
}
node.nodeValue=text.dataset.text="";
time=0;
word=words[x];
chars=word.length;
for(y=0;y<chars;y++){
time+=50;
setTimeout(function(y){
node.nodeValue+=word[y];
},time,y);
}
setTimeout(function(word){
text.dataset.text=word;
setTimeout(function(x){
write(x);
},3000,++x);
},time,word);
})(0);
})(document);
*{margin:0px;padding:0px;}
body{
background:pink;
height:100vh;
width:100vw;
}
.container{
align-items:center;
display:flex;
height:100%;
justify-content:center;
width:100%;
}
.text{
color:#20aaff;
font-size:40px;
font-weight:300;
position:relative;
text-transform:uppercase;
}
.text:before{
animation:noise-anim-2 3s infinite linear alternate-reverse;
clip:rect(0,900px,0,0);
color:#a8d500;
content:attr(data-text);
left:-2px;
overflow:hidden;
position:absolute;
text-shadow:1px 0 blue;
top:0;
}
.text:after{
animation:noise-anim 2s infinite linear alternate-reverse;
clip:rect(0,900px,0,0);
color:black;
content:attr(data-text);
left:2px;
position:absolute;
text-shadow:-1px 0 red;
top:0;
overflow:hidden;
}
.error{
align-items:center;
border:1px solid #ccc;
display:flex;
flex-direction:column;
height:80%;
justify-content:space-around;
max-height:300px;
text-align:center;
width:80%;
max-width:500px;
}
.error .errorHeader{
display:flex;
justify-content:center;
}
.error h1{
font-size:72px;
color:#20aaff;
font-weight:700;
text-transform:uppercase;
}
.error p{
color:white;
}
.arrow-up {
width: 0px;
height: 0px;
border-left: 40px solid transparent;
border-right: 40px solid transparent;
border-bottom: 70px solid white;
position: relative;
transform: translateY(15px);
}
.arrow-up:before{
border-left:35px solid transparent;
border-right:35px solid transparent;
border-bottom:65px solid #20aaff;
content:"";
height:0px;
position:absolute;
transform:translate(-50%,5%);
width:0px;
}
.arrow-up:after{
content:"!";
color:white;
display:block;
font-size:50px;
position:absolute;
transform:translate(-50%,15%);
}
.hide{display:none;}
@keyframes noise-anim{0%{clip:rect(23px,9999px,17px,0);}5%{clip:rect(34px,9999px,24px,0);}10%{clip:rect(34px,9999px,9px,0);}15%{clip:rect(20px,9999px,22px,0);}20%{clip:rect(5px,9999px,18px,0);}25%{clip:rect(15px,9999px,35px,0);}30%{clip:rect(26px,9999px,36px,0);}35%{clip:rect(26px,9999px,33px, 0);}40%{clip:rect(26px,9999px,5px,0);}45%{clip:rect(13px,9999px,28px,0);}50%{clip:rect(29px,9999px,38px,0);}55%{clip:rect(30px,9999px,13px,0);}60%{clip:rect(7px,9999px,36px,0);}65%{clip:rect(28px,9999px,14px,0);}70%{clip:rect(15px,9999px,16px,0);}75%{clip:rect(8px,9999px,8px,0);}80%{clip:rect(39px,9999px,2px,0);}85%{clip:rect(20px,9999px,18px,0);}90%{clip:rect(27px,9999px,8px,0);}95%{clip:rect(33px,9999px,14px,0);}100%{clip:rect(23px,9999px,25px,0);}}
@keyframes noise-anim-2{0%{clip:rect(5px, 9999px, 21px, 0);}5%{clip:rect(38px,9999px,11px,0);}10%{clip:rect(37px,9999px,18px,0);}15%{clip:rect(11px,9999px,38px,0);}20%{clip:rect(24px,9999px,13px,0);}25%{clip:rect(37px,9999px,25px,0);}30%{clip:rect(28px,9999px,40px,0);}35%{clip:rect(14px,9999px,33px,0);}40%{clip:rect(35px,9999px,3px,0);}45%{clip:rect(23px,9999px,19px,0);}50%{clip:rect(7px,9999px,18px,0);}55%{clip:rect(18px,9999px,15px,0);}60%{clip:rect(14px,9999px,31px,0);}65%{clip:rect(29px,9999px,4px,0);}70%{clip:rect(12px,9999px,2px,0);}75%{clip:rect(3px,9999px,38px,0);}80%{clip:rect(24px,9999px,39px,0);}85%{clip:rect(34px,9999px,12px,0);}90%{clip:rect(15px,9999px,11px,0);}95%{clip:rect(10px,9999px,14px,0);}100%{clip:rect(38px,9999px,21px,0);}}
<div class="container">
<p id="id" class="text"></p>
<div id="errorId" class="error hide">
<div class="errorHeader">
<div class="arrow-up"></div>
<h1>End</h1>
<div class="arrow-up"></div>
</div>
</div>
</div>

并且,为了解决问题,这里有一个 ES6 解决方案:

{
let d=document,
words=["Apple","Car","Building","Random"],
text=d.getElementById("id"),
error=d.getElementById("errorId"),
node=text.appendChild(d.createTextNode("")),
time=0,
chars,writer;
words.forEach(word=>{
setTimeout(word=>{
node.nodeValue=text.dataset.text="";
writer=0;
chars=word.split``;
chars.forEach(char=>{
writer+=50;
setTimeout(char=>node.nodeValue+=char,writer,char);
});
setTimeout(word=>text.dataset.text=word,writer,word);
time+=writer;
},time,word);
time+=3000;
});
setTimeout(()=>{
text.classList.add("hide");
error.classList.remove("hide");
},time);
}
*{margin:0px;padding:0px;}
body{
background:pink;
height:100vh;
width:100vw;
}
.container{
align-items:center;
display:flex;
height:100%;
justify-content:center;
width:100%;
}
.text{
color:#20aaff;
font-size:40px;
font-weight:300;
position:relative;
text-transform:uppercase;
}
.text:before{
animation:noise-anim-2 3s infinite linear alternate-reverse;
clip:rect(0,900px,0,0);
color:#a8d500;
content:attr(data-text);
left:-2px;
overflow:hidden;
position:absolute;
text-shadow:1px 0 blue;
top:0;
}
.text:after{
animation:noise-anim 2s infinite linear alternate-reverse;
clip:rect(0,900px,0,0);
color:black;
content:attr(data-text);
left:2px;
position:absolute;
text-shadow:-1px 0 red;
top:0;
overflow:hidden;
}
.error{
align-items:center;
border:1px solid #ccc;
display:flex;
flex-direction:column;
height:80%;
justify-content:space-around;
max-height:300px;
text-align:center;
width:80%;
max-width:500px;
}
.error .errorHeader{
display:flex;
justify-content:center;
}
.error h1{
font-size:72px;
color:#20aaff;
font-weight:700;
text-transform:uppercase;
}
.error p{
color:white;
}
.arrow-up {
width: 0px;
height: 0px;
border-left: 40px solid transparent;
border-right: 40px solid transparent;
border-bottom: 70px solid white;
position: relative;
transform: translateY(15px);
}
.arrow-up:before{
border-left:35px solid transparent;
border-right:35px solid transparent;
border-bottom:65px solid #20aaff;
content:"";
height:0px;
position:absolute;
transform:translate(-50%,5%);
width:0px;
}
.arrow-up:after{
content:"!";
color:white;
display:block;
font-size:50px;
position:absolute;
transform:translate(-50%,15%);
}
.hide{display:none;}
@keyframes noise-anim{0%{clip:rect(23px,9999px,17px,0);}5%{clip:rect(34px,9999px,24px,0);}10%{clip:rect(34px,9999px,9px,0);}15%{clip:rect(20px,9999px,22px,0);}20%{clip:rect(5px,9999px,18px,0);}25%{clip:rect(15px,9999px,35px,0);}30%{clip:rect(26px,9999px,36px,0);}35%{clip:rect(26px,9999px,33px, 0);}40%{clip:rect(26px,9999px,5px,0);}45%{clip:rect(13px,9999px,28px,0);}50%{clip:rect(29px,9999px,38px,0);}55%{clip:rect(30px,9999px,13px,0);}60%{clip:rect(7px,9999px,36px,0);}65%{clip:rect(28px,9999px,14px,0);}70%{clip:rect(15px,9999px,16px,0);}75%{clip:rect(8px,9999px,8px,0);}80%{clip:rect(39px,9999px,2px,0);}85%{clip:rect(20px,9999px,18px,0);}90%{clip:rect(27px,9999px,8px,0);}95%{clip:rect(33px,9999px,14px,0);}100%{clip:rect(23px,9999px,25px,0);}}
@keyframes noise-anim-2{0%{clip:rect(5px, 9999px, 21px, 0);}5%{clip:rect(38px,9999px,11px,0);}10%{clip:rect(37px,9999px,18px,0);}15%{clip:rect(11px,9999px,38px,0);}20%{clip:rect(24px,9999px,13px,0);}25%{clip:rect(37px,9999px,25px,0);}30%{clip:rect(28px,9999px,40px,0);}35%{clip:rect(14px,9999px,33px,0);}40%{clip:rect(35px,9999px,3px,0);}45%{clip:rect(23px,9999px,19px,0);}50%{clip:rect(7px,9999px,18px,0);}55%{clip:rect(18px,9999px,15px,0);}60%{clip:rect(14px,9999px,31px,0);}65%{clip:rect(29px,9999px,4px,0);}70%{clip:rect(12px,9999px,2px,0);}75%{clip:rect(3px,9999px,38px,0);}80%{clip:rect(24px,9999px,39px,0);}85%{clip:rect(34px,9999px,12px,0);}90%{clip:rect(15px,9999px,11px,0);}95%{clip:rect(10px,9999px,14px,0);}100%{clip:rect(38px,9999px,21px,0);}}
<div class="container">
<p id="id" class="text"></p>
<div id="errorId" class="error hide">
<div class="errorHeader">
<div class="arrow-up"></div>
<h1>End</h1>
<div class="arrow-up"></div>
</div>
</div>
</div>


如果您希望保留当前的实现,请在第二个 for 循环之前添加以下行:

setTimeout(function(){document.getElementById("id").dataset.text=""},time);

并在第二个 for 循环之后立即添加以下行:

setTimeout(function(word){document.getElementById("id").dataset.text=word},time,words[x]);

为您提供以下内容:

setTimeout(function(){document.getElementById("id").dataset.text=""},time);
for(y=0;y<=words[x].length;y++){
var word=words[x].substr(0,y)
time=time+50;
typeWord(word,time);
}
setTimeout(function(word){document.getElementById("id").dataset.text=word},time,words[x]);

关于javascript - 在显示数组的每个值后向 <div/> 添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43253793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com