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

Popular posts from this blog

commonjs - How to write a typescript definition file for a node module that exports a function? -

openid - Okta: Failed to get authorization code through API call -

thorough guide for profiling racket code -