As the title suggests. You can see in my code, I have text and text2 that forms the text for the typing effect. But they both start at the same time. I would like to create a delay on text2 so that it starts when text finishes. Any help would be greatly appreciated and thank you in advance.
class Home extends Component { constructor(props) { super(props); this.state = { text:"This is sample text", text2:"This is sample text for text2", count:0, show:"", show2:"", } this.update = this.update.bind(this); } componentDidMount() { this.timerID = setInterval( () => this.update(), 300 ); } componentWillUnmount() { clearInterval(this.timerID); } update(){ const counter = this.state.count; const letter = this.state.text.charAt(counter); const letter2 = this.state.text2.charAt(counter); const textlength = this.state.text.length; //let text += letter; console.log("counter : " + counter + " / letter : " + letter); console.log("counter : " + counter + " / letter2 : " + letter2); if(counter <= textlength){ this.setState({ show: this.state.show + letter, show2: this.state.show2 + letter2, count: this.state.count + 1, }); }else{ clearInterval(this.timerID); } };
Advertisement
Answer
Here you go
update() { const counter = this.state.count; const text1 = this.state.text; const text2 = this.state.text2; const letter = text1.charAt(counter); // Note: It'll be empty string for negative index const letter2 = text2.charAt(counter - text1.length); const textlength = text1.length + text2.length; if(counter < textlength) { this.setState({ show: this.state.show + letter, show2: this.state.show2 + letter2, count: this.state.count + 1, }); } else { clearInterval(this.timerID); } }