javascript - Adding an attribute to a <div /> after each value of an array is displayed -
i displaying each value of array it's typed. after 1 value it's displayed, want <div />
take attribute (data-text
of words[x]
), , remove when next value being typed.
var words = [ "apple", "car", "building", "random" ]; var time = 0; function typeword(word, time) { settimeout( function() { $('#id') .html(word) }, time ); } function writewords() { (x = 0; x < words.length; x++) { (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>
thank time , sorry english.
i've taken liberty of writing couple of alternative implementations you.
(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>
and, round things out, here's es6 solution:
{ 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>
if you'd prefer keep current implementation, add following line before second for
loop:
settimeout(function(){document.getelementbyid("id").dataset.text=""},time);
and add following line after second for
loop:
settimeout(function(word){document.getelementbyid("id").dataset.text=word},time,words[x]);
giving following:
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]);
Comments
Post a Comment