Eingabe von animiertem Text

Lesezeit: 4 Minuten

Ich habe ein DIV-Tag mit Text darin. Ist es möglich, den Textinhalt in einer Schleife mit einem Tippeffekt zu ändern, bei der er austippt, dann rückwärts geht, die Buchstaben löscht und mit einem neuen Text von vorne beginnt? Ist das mit jquery möglich?

Benutzer-Avatar
Roko C. Buljan

Ein einfacher Ansatz:

const elsTyper = document.querySelectorAll("[data-typer]");
const rand = (min, max) => Math.floor(Math.random() * (max - min + 1) + min);

const typer = (el) => {
  const text = el.dataset.typer;
  const tot = text.length;
  let ch = 0;

  (function typeIt() {
    if (ch > tot) return;
    el.textContent = text.substring(0, ch++);
    setTimeout(typeIt, rand(60, 300));
  }());
};

elsTyper.forEach(typer);
/* PULSATING CARET */
[data-typer]:after {
  content:"";
  display: inline-block;
  vertical-align: middle;
  width:1px;
  height:1em;
  background: #000;
  animation: caretPulsate 1s linear infinite; 
}
@keyframes caretPulsate {
  0%   {opacity:1;}
  50%  {opacity:1;}
  60%  {opacity:0;}
  100% {opacity:0;}
}
<span data-typer="Hi! My name is Al. I will guide you trough the Setup process."></span>
<h3 data-typer="This is another typing animated text"></h3>

Holen Sie sich also im Grunde die data-typer Zeichenfolge Ihres Elements, fügen Sie Zeichen für Zeichen mit einem random ein Minimal Maximal Auszeit. Das pulsierende “Caret” ist nichts durch ein CSS3 animiertes :after Pseudo-Element derselben SPAN.

Siehe auch: Zufallszahl zwischen zwei Zahlen in JavaScript generieren

  • Einige Leute haben angerufen Verzögerung

    – Alexander

    21. Februar 2013 um 23:24 Uhr

  • @Alexander …wir sind Menschen? 😉 haha ​​scherz, ich habe mir den begriff aus der tontechnik geborgt

    – Roko C. Buljan

    21. Februar 2013 um 23:24 Uhr


  • Dies wäre viel performanter, wenn $('.writer') wurde zuerst in einer Variablen zwischengespeichert. var $writer = $('.writer');

    – ChrisM

    29. April 2014 um 14:43 Uhr


  • Woher kommt die Formel (Math.random()*(300-60+1)+60) ?

    – Olivier Boisse

    13. Juni 2017 um 14:25 Uhr

  • @oliv37 Einfache Mathematik. Diese Formel erzeugt Rand im Min-Max-Bereich. Math.random ergibt eine Dezimalzahl zwischen 0..1 (ausschließlich). Angenommen, wir brauchen random int. zwischen 10 und 30, (rand * 20) + 10 also die ersten 20 ist nichts aber (max-min) oder (30-10). Random (rand * 20) gibt logischerweise Dezimalzahlen im Bereich 0-19.999 zurück…. Da wir wollen, dass 20 inklusive ist, machen wir a +1 wie (max-min+1) jetzt haben wir den Bereich 0 - 20.999... Dann steige das Ergebnis um 10 Reichweiten zu bekommen 10 - 30.999... Als verwenden Math.floor oder ~~ boden das ergebnis zu bekommen ganze Zahlen im Perfekt 10 - 30 Angebot.

    – Roko C. Buljan

    13. Juni 2017 um 16:35 Uhr


Mit der text()-Methode von Jquery können Sie den Text eines Elements festlegen.

http://api.jquery.com/text/

Sie können dies verwenden, um den Inhalt zu animieren, indem Sie dies in einer Schleife aufrufen und ihm den Inhalt geben, den Sie in jedem Frame sehen möchten.

var Rahmen = [‘t_’, ‘ty_’, ‘typ_’, ‘type_’]

// loop over frames ... inner part reads frame and prints it
// use setInterval, etc.
$('#my-div').text( frames[i] );

Ich habe kompliziertere Dinge getan, indem ich die Textelemente geteilt und die Zeichen manipuliert habe, aber ich denke, in Ihrem Fall wäre es übertrieben.

Benutzer-Avatar
GorvGoyl

Tippeffekt + Löscheffekt + blinkender Cursor

ich veränderte Simon Shahriveri codepan, um den blinkenden Effekt des Cursors weiter hinzuzufügen. Es ist auch mit IE kompatibel.
Hier ist das Endergebnis: https://codepen.io/jerrygoyal/pen/vRPpGO

HTML:

<h1>
  <a href="" class="typewrite" data-period="2000" data-type="[ "Hi, I am Jerry.", "I am Creative.", "I Love Design.", "I Love to Develop." ]">
    <span class="wrap"></span>
  </a>
</h1>

CSS:

body {
  background-color:#ce6670;
  text-align: center;
  color:#fff;
  padding-top:10em;
}

* { color:#fff; text-decoration: none;}

.wrap{
   animation: caret 1s steps(1) infinite;
   border-right: 0.08em solid #fff;
  padding-right: 1px;
}
@keyframes caret {
  50% {
    border-color: transparent;
  }
}

JS:

var TxtType = function(el, toRotate, period) {
        this.toRotate = toRotate;
        this.el = el;
        this.loopNum = 0;
        this.period = parseInt(period, 10) || 2000;
        this.txt="";
        this.tick();
        this.isDeleting = false;
    };

    TxtType.prototype.tick = function() {
        var i = this.loopNum % this.toRotate.length;
        var fullTxt = this.toRotate[i];

        if (this.isDeleting) {
        this.txt = fullTxt.substring(0, this.txt.length - 1);
        } else {
        this.txt = fullTxt.substring(0, this.txt.length + 1);
        }

        this.el.innerHTML = '<span class="wrap">'+this.txt+'</span>';

        var that = this;
        var delta = 200 - Math.random() * 100;

        if (this.isDeleting) { delta /= 2; }

        if (!this.isDeleting && this.txt === fullTxt) {
        delta = this.period;
        this.isDeleting = true;
        } else if (this.isDeleting && this.txt === '') {
        this.isDeleting = false;
        this.loopNum++;
        delta = 500;
        }

        setTimeout(function() {
        that.tick();
        }, delta);
    };

    window.onload = function() {
        var elements = document.getElementsByClassName('typewrite');
        for (var i=0; i<elements.length; i++) {
            var toRotate = elements[i].getAttribute('data-type');
            var period = elements[i].getAttribute('data-period');
            if (toRotate) {
              new TxtType(elements[i], JSON.parse(toRotate), period);
            }
        }
  
    };

Ein anderer Weg, indem Sie nur Funktionen anstelle von js-Prototypen verwenden: https://codepen.io/jerrygoyal/pen/vRPpGO

1016380cookie-checkEingabe von animiertem Text

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy