zoukankan      html  css  js  c++  java
  • 实现【打字机动画】的两种办法

    打字机动画是一个很常见的动画效果,实现的方式也有很多

    最近在项目中刚好遇到了类似的需求,整理了几个实现动画的方法,分享一下~

    方法一、

    效果最好的打字机动画

    通过 js 的定时器增减文字,单独用一个标签来写光标动画,这样即使文字换行也能良好呈现

    HTML

    <div class="typing">
       <span class="typing-text">这是一个传说中的打字动画</span>
       <i class="caret"></i>
    </div>

    CSS

    复制代码
    .caret::after {
       content: "";
       display: inline-block;
        2px;
       height: 1em;
       margin-bottom: -2px;
       margin-left: -2px;
       background-color: #333;
       animation: blink-caret .5s step-end infinite;
    }
    @keyframes  blink-caret { 50% {opacity: 0;} }
    复制代码

    JS

    复制代码
      var box = document.getElementsByClassName('typing-text')[0];
      var str = box.innerText;
      var i = 0;
      box.innerText = '';
      var typing = setInterval(function() {
        box.innerText += str[i++];
        i >= str.length && clearInterval(typing);
      }, 200);
    复制代码


    方法二、

    在网上找的方法,纯 CSS3 做的动画

    通过限定宽度配合 overflow:hidden 来实现文字添加的效果,使用 border 做光标

    复制代码
    <style type="text/css">
          .typing {
            border-right: .1em solid;
             9em; /*宽度为“字数 + em”*/
            white-space: nowrap;
            overflow: hidden;
            animation: typing 5s steps(9, end), /*步数为字数*/
                  blink-caret .5s step-end infinite alternate;
          }
          @keyframes typing { from {  0; } }
          @keyframes blink-caret { 50% { border-color: transparent; } }
    </style>
            
    <div class="typing">这是一个打字机动画</div>      
    复制代码

    这种办法的优点就是不用写 js,但有很多的局限性:

    比如文字不能自动换行,元素宽度还需要手动设置

    当文字是英文的时候,必须使用 Consolas 之类的等宽字体

  • 相关阅读:
    Vue 获取URL链接后面的参数值
    Vue 跳转到指定页面,返回到上一页
    Vant 插件
    Vue 返回上一页,记住上一页的数据
    vue pc端支付宝支付
    Spring 中的事务
    数据库中锁与事务
    《产品方法论》 读书笔记
    设计模式之装饰者模式
    设计模式之单例模式
  • 原文地址:https://www.cnblogs.com/goodbeypeterpan/p/7975970.html
Copyright © 2011-2022 走看看