/
zmeev06
/
DSTU-frontend-codecouch
Обзор
Документация
Войти
/
zmeev06
/
DSTU-frontend-codecouch
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
src/components/TextAnimation.vue
95 строк
2 KB
Sergey Timoshenko
feat: add animation
28 апр 2024, 17:15
28 апр 2024, 17:15
ded27a9
Код
Авторство
О чём код?
<template> <span class="txt-rotate" data-period="2000" data-rotate='[ "Front-end", "Back-end", "Data Science", "SEO"]'></span> </template> <script setup> import { onMounted } from 'vue' var TxtRotate = 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; }; TxtRotate.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 = 300 - 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); }; onMounted(() => { var elements = document.getElementsByClassName('txt-rotate'); for (var i = 0; i < elements.length; i++) { var toRotate = elements[i].getAttribute('data-rotate'); var period = elements[i].getAttribute('data-period'); if (toRotate) { new TxtRotate(elements[i], JSON.parse(toRotate), period); } } // INJECT CSS var css = document.createElement("style"); css.type = "text/css"; css.innerHTML = ".txt-rotate > .wrap { border-right: 0.08em solid #108A00 }"; document.body.appendChild(css); }) </script> <style> .typing-container { position: relative; } .word { display: inline-block; margin-right: 10px; } .cursor { width: 2px; height: 20px; background-color: black; animation: blink 0.7s infinite; } @keyframes blink { 0% { background-color: black; } 50% { background-color: transparent; } 100% { background-color: black; } } </style>