侧边栏壁纸
  • 累计撰写 57 篇文章
  • 累计创建 23 个标签
  • 累计收到 4 条评论

50projects50days知识点-30-auto-text-effect

cluski
2023-03-30 / 0 评论 / 0 点赞 / 181 阅读 / 266 字
温馨提示:
本文最后更新于 2023-03-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

    示例网址:

    https://50projects50days.com/projects/auto-text-effect/
    http://50projects.tc.cluski.top/50projects50days/auto-text-effect/

    效果:

    auto-text-effect

    思路:

    在js中使用setTimeout来设置定时,每个一段时间将元素的innerText给更新掉。

    在本例子中有一个小技巧,使用String的切片slice方法,切割字符串。

    全部js如下:

    const textEl = document.getElementById('text')
    const speedEl = document.getElementById('speed')
    const text = 'We Love Programming!'
    let idx = 1
    let speed = 300 / speedEl.value
    
    writeText()
    
    function writeText() {
        textEl.innerText = text.slice(0, idx)
    
        idx++
    
        if(idx > text.length) {
            idx = 1
        }
    	// 每次重新设置timeout
        setTimeout(writeText, speed)
    }
    
    // 重新计算速度,speed越小,代表速度越快
    speedEl.addEventListener('input', (e) => speed = 300 / e.target.value)
    

    上述是使用到setTimeout来做的,当然也可以使用setInterval来做:

    const textEl = document.getElementById('text');
    const speedInput = document.getElementById('speed');
    
    const text = 'We Love Programming!'
    let pos = 1
    let speed = 300 / speedInput.value
    
    function processText() {
        textEl.innerText = text.slice(0, pos)
        pos++
        if (pos > text.length) {
            pos = 1
        }
    }
    
    let interval = setInterval(() => processText(), speed)
    
    speedInput.addEventListener('input', (e) => {
        speed = 300 / e.target.value
    
        clearInterval(interval)
        interval = setInterval(() => processText(), speed)
    })
    
    0

    评论区