首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >倒向打字效应

倒向打字效应
EN

Stack Overflow用户
提问于 2022-12-03 13:46:37
回答 3查看 49关注 0票数 -1

我正试图用我的代码获得一个反向输入的效果。所以<P>会说“很快就来”,然后向后输入。然后将前向键入"SeaDogs.com.eu.as“

到目前为止,这就是我所拥有的,因为某种原因,它很快就会倒退两次?这是我试图克服的第一次冲撞。试着拖延几秒钟,这样它就能显示出“很快”这个词。

代码语言:javascript
复制
var str = 'Coming Soon';
var remove = false;
var i = str.length;
var isTag;
var text;

(function type() {
  if (!remove) {
    text = str.slice(0, --i);
    if (text === str) return;
  }

  if (!isTag) {
    document.getElementById("demo").innerHTML = text;
  }



  setTimeout(type, 520);

}());
代码语言:javascript
复制
<p id="demo"></p>

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-12-03 14:10:15

直接用异步/等待方式编写逻辑代码比篡改超时要干净得多:

代码语言:javascript
复制
function delay(time) {
    return new Promise(r =>
        setTimeout(r, time))
}

async function typeAnimation(div, rtl, text, time) {
    for (let i = 1; i <= text.length; i++) {
        div.innerText = text.slice(0, rtl ? -i : +i)
        await delay(time)
    }
}

async function main() {
    let div = document.querySelector('h1')
    await typeAnimation(div, true, 'Coming soon...', 100)
    await typeAnimation(div, false, 'and here it comes!', 100)
}

main()
代码语言:javascript
复制
<h1></h1>

票数 2
EN

Stack Overflow用户

发布于 2022-12-03 13:57:51

我会用承诺创建两个函数

代码语言:javascript
复制
const demo = document.querySelector('#demo')

const initial = "Coming Soon"
const later = "SeaDogs.com.eu.as"

remove(initial).then(() => add(later))

function remove(text) {
  let i = text.length
  return new Promise(r => {
    removeCharacter()

    function removeCharacter() {
      if (i < 0) {
        r()
        return
      }
      const copy = text.slice(0, i)
      demo.textContent = copy

      setTimeout(removeCharacter, 100)
      i -= 1
    }
  })
}

function add(text) {
  let i = 0
  return new Promise(r => {
    removeCharacter()

    function removeCharacter() {
      if (i > text.length) {
        r()
        return
      }
      const copy = text.slice(0, i)
      demo.textContent = copy

      setTimeout(removeCharacter, 100)
      i += 1
    }
  })
}
代码语言:javascript
复制
<p id="demo"></p>

票数 1
EN

Stack Overflow用户

发布于 2022-12-03 14:07:21

退出子句不正确--检查str == str的子字符串是否正确--这是它永远不会的。

由于.slice与负索引的工作方式,您获得了两次

  • .slice(0, 8) ->开始到第8 character
  • .slice(0, -2) ->,从

开始使用2个字符

可以将exit子句从if (text === str) return更改为

代码语言:javascript
复制
if (text === "") return;

代码语言:javascript
复制
if (i === 0) return;

取决于何时结束-因为exit子句在输出之前,这将保留最后一个字符,因此:

代码语言:javascript
复制
if (i<0) return;

代码语言:javascript
复制
var str = 'Coming Soon';
var remove = false;
var i = str.length;
var isTag;
var text;

(function type() {
  if (!remove) {
    text = str.slice(0, --i);
    //console.log(i, text)
    if (i < 0) return;
  }

  if (!isTag) {
    document.getElementById("demo").innerHTML = text;
  }

  setTimeout(type, 150);

}());
代码语言:javascript
复制
<p id="demo"></p>

但是,我希望remove!remove之间会有一些混淆,因为您还没有-删除(即添加)和-i。因此,在添加时,确实需要检查text==str

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74667319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档