文字跳动效果

1,067 阅读2分钟

我正在参加「码上掘金挑战赛」详情请看:码上掘金挑战赛来了!

前言

大家好,我是小阵 🔥,一路奔波不停的码字业务员
如果喜欢我的文章,可以关注 ➕ 点赞,与我一同成长吧~😋
加我微信:zzz886885,邀你进群,一起学习交流,摸鱼学习两不误🌟

开开心心学技术大法~~

开心

来了来了,他真的来了~

正文

实现思路

  • 可以看到除了基本的静态页面
  • 就只有字体跳动这一个亮点了
  • 怎样实现文字跳动效果呢?
  • 想起来可以通过js来控制每一个文字元素的top,用定时器来让不同的文字元素一次进行top的变化
  • 至于top变化为什么会很丝滑,可以用多段的自由落体公式算出来
  • 哇,好复杂呀!
  • 是的,js实现比较复杂,但是css实现就异常简单了
  • 需要有top变化?
  • css的translate来搞定
  • 需要依次变化的效果?
  • css的transition-delay来搞定
  • 需要丝滑的top变化?
  • css的transition的赛贝尔曲线呀cubic-bezier
  • 哦,那明白了,看到这里下面其实已经不用看了。。哈哈哈,大家肯定都有腹稿了

但是我还得写下去。。

具体实现

基础html

<body>
    <div class="container">
      <h1>Please Login</h1>
      <form>
        <div class="form-control">
          <input type="text" required>
          <label>Email</label>
        </div>
​
        <div class="form-control">
          <input type="password" required>
          <label>Password</label>
        </div>
​
        <button class="btn">Login</button>
​
        <p class="text">Don't have an account? <a href="#">Register</a> </p>
      </form>
    </div>
    <script src="script.js"></script>
  </body>

因为要动态控制每个span元素的transition-delay,所以引入了script.js

其实就像这个demo中的用法一样,如果是固定位数的span,写死也可。

动画css

.form-control input:focus + label span,
.form-control input:valid + label span {
  color: lightblue;
  transform: translateY(-30px);
}
.form-control label span {
  display: inline-block;
  font-size: 18px;
  min-width: 5px;
  transition: 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
}

其他的css都不必再细说了

动画js

const labels = document.querySelectorAll('.form-control label')
​
labels.forEach(label => {
    label.innerHTML = label.innerText
        .split('')
        .map((letter, idx) => `<span style="transition-delay:${idx * 50}ms">${letter}</span>`)
        .join('')
})

重点就是transition-delay的设置了

完整代码

总结

  • 主要是transition-delay的用法
  • cubic-bezier(0.68, -0.55, 0.265, 1.55)赛贝尔曲线可以自己慢慢调试

结语

如果文章真的有帮到你,希望可以多多点赞、收藏、关注支持一波呀!!小阵会很开心哒~

热爱开源,支持开源,拥抱开源!

文章如有错误或不严谨之处,还望指出,感谢感谢!!!

加油!

往期好文推荐