js+css实现文字散开重组动画特效代码分享

下面给出“js+css实现文字散开重组动画特效”的完整攻略。

原理说明

该特效的实现需要使用到CSS 的 transform 属性来进行文字的位移、旋转等操作。同时,通过JS 中的事件绑定实现触发动画效果。

  1. 首先将文字拆分为单个的字体元素
  2. 随后,通过JS 代码将单个的字体元素进行位置、旋转等方面的定义
  3. 当触发动画效果时,JS 代码随机分配位置和角度等属性,并且添加CSS 动画特效,使得字体元素散开;同样,当触发“合并”动画效果时,JS 代码也会对字体元素进行“合并”的操作。

实现步骤

下面我们将按照步骤来说明如何实现这个动画特效。

准备工作

文字散开重组的动画特效需要引用两个文件,分别是 fontawesome.cssindex.css

其中,fontawesome.css 文件用于引入各种图标字体,并需要在HTML文档中进行定义。

index.css 文件用于定义动画特效样式。

<link rel="stylesheet" href="//cdn.bootcss.com/font-awesome/5.13.0/css/all.min.css">
<link rel="stylesheet" href="index.css">

定义HTML

将需要动画展示的文字放在 <h1> 标签中,并且为每个字设置 span 标签。

<h1 class="font-effect-3d">
  <span>W</span>
  <span>E</span>
  <span>B</span>
  <span>D</span>
  <span>E</span>
  <span>S</span>
  <span>I</span>
  <span>G</span>
  <span>N</span>
</h1>

编写javascript

const container = document.querySelector('.font-effect-3d');
const spans = document.querySelectorAll('.font-effect-3d span');
const letters = [];

for (let index = 0; index < spans.length; index++) {
  letters.push(spans[index].innerHTML);
  spans[index].innerHTML = `<span class="letter-container">${spans[index].innerHTML}</span>`;
}

for (let index = 0; index < letters.length; index++) {
  spans[index].querySelector('.letter-container').style.transform = `translate(0, ${index * -20}px)`;
}

const createAnimation = state => {
  for (let index = 0; index < letters.length; index++) {
    const span = spans[index];
    const letter = letters[index];
    if (state === 'out') {
      span.style.animationName = 'letter-out';
      span.style.animationDelay = `${index * 0.05}s`;
      span.style.animationTimingFunction = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
      span.style.animationDuration = '1s';
    } else if (state === 'in') {
      span.style.animationName = 'letter-in';
      span.style.animationDelay = `${(letters.length - index) * 0.05}s`;
      span.style.animationTimingFunction = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
      span.style.animationDuration = '1s';
    }
    if (state !== 'reset') {
      span.addEventListener('animationend', () => {
        span.style.animation = '';
      });
    }
    if (state === 'reset') {
      span.style.transform = '';
    }
  }
};

container.addEventListener('mousedown', () => {
  createAnimation('out');
});

container.addEventListener('mouseup', () => {
  setTimeout(() => {
    createAnimation('in');
  }, 1000);
});

createAnimation('reset');

编写CSS

@keyframes letter-out {
  to {
    transform: scale(2) rotate(90deg) translateX(500px);
    opacity: 0;
  }
}

@keyframes letter-in {
  from {
    transform: scale(2) rotate(90deg) translateX(500px);
    opacity: 0;
  }
}

.letter-container {
  display: inline-block;
  transform-origin: center;
  transition: transform 0.5s ease-out;
}

.font-effect-3d {
  font-size: 8rem;
  font-family: 'Playfair Display SC', serif;
  text-transform: uppercase;
  color: #c2a971;
  width: 100%;
  text-align: center;
  position: relative;
  perspective: 2000px;
  user-select: none;
  -webkit-user-select: none;
}

.font-effect-3d span {
  display: inline-block;
  position: relative;
  transition: transform 0.5s ease-out;
  top: 0px;
  left: 0px;
  z-index: 2;
  opacity: 0.7;
}

.font-effect-3d span:after {
  content: attr(data-letter);
  position: absolute;
  top: 0px;
  left: 0px;
  color: #333;
  z-index: -1;
  opacity: 0;
}

.font-effect-3d:hover span:after,
.font-effect-3d:focus span:after {
  transform: translate3d(10px, 10px, -50px);
  opacity: 1;
  transition-delay: 0.5s, 0s;
  transition-duration: 0.5s, 0.5s;
  transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000), ease-out;
}

.font-effect-3d:active span:after {
  transform: translate3d(10px, 10px, -50px) rotateX(180deg);
  opacity: 0;
  transition-delay: 0s;
  transition-duration: 0.5s;
  transition-timing-function: ease-out;
}

示例说明

示例一

校园英语日为例,如下图所示,当用户鼠标点击触发时,字体进行散开动画并重组成新的单词。

示例代码:https://codepen.io/lindc/pen/MXjZMo

示例二

文本转换工具为例,如下图所示,当用户输入单词时,字体原地旋转随机重组为新字体组合。

示例代码:https://codepen.io/jcoulterdesign/pen/KygoKj

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js+css实现文字散开重组动画特效代码分享 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JS函数验证总结(方便js客户端输入验证)

    JS函数验证是用JavaScript编写的表单客户端输入验证,目的是方便用户输入验证,减少对服务器沟通请求,缩短请求响应时间和提高用户体验。下面是JS函数验证的完整攻略: 1.概述 JS函数验证是对用户的输入数据预先验证,验证的方式可以使用JS正则表达式、API等方式,可以在用户提交表单到服务器之前,即在本地网页浏览器中对数据进行验证。这样可以减少不必要的请…

    JavaScript 2023年6月11日
    00
  • 11款基于Javascript的文件管理器

    我来为您讲解关于“11款基于JavaScript的文件管理器”的完整攻略。 1. 背景介绍 JavaScript是一种流行的编程语言,同时也是前端开发中不可或缺的一部分。文件管理器是一个非常重要的工具,能够帮助用户对文件进行管理,这篇攻略就是为了介绍一些基于JavaScript的文件管理器。 2. 技术细节 下面是11款基于JavaScript的文件管理器,…

    JavaScript 2023年5月27日
    00
  • 在javascript中实现函数数组的方法

    实现函数数组的方法可以使用JavaScript的数组和函数的结合,我们可以把函数当做数组的元素存储在数组中,然后通过数组的方法来操作这些函数。 下面是具体的实现步骤: 1. 定义函数数组 首先需要定义一个函数数组,可以用以下代码创建一个空数组: let funcArray = []; 也可以通过下面的代码创建包含初始元素的函数数组: let funcArra…

    JavaScript 2023年5月27日
    00
  • JavaScript高级编程之Array的用法总结

    JavaScript高级编程之Array的用法总结 1. Array是什么? 在JavaScript中,Array是一种用来存储和操作一组值的有序集合,可以容纳多种类型的数据,并且可以动态扩展大小。Array是JavaScript编程中最常用的数据类型之一,也是编写JavaScript程序时必须掌握的重要内容之一。 2. Array的常用方法 2.1 增加和…

    JavaScript 2023年5月27日
    00
  • JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)

    JS数组排序技巧汇总 在 Javascript 中,排序操作是非常常见的操作。本篇文章将会介绍常见的几种排序算法:冒泡排序、选择排序、插入排序、快速排序和希尔排序。同时,我们也会讲解如何使用这些算法在 Javascript 中进行排序。 冒泡排序 冒泡排序是最基础的算法之一,也是最容易理解的算法之一。它通过依次比较相邻的两个元素,把大的元素往后排,小的元素往…

    JavaScript 2023年5月27日
    00
  • 关于JavaScript中的this指向问题总结篇

    详细讲解“关于JavaScript中的this指向问题总结篇”的完整攻略 一、背景及概述 JavaScript的this关键字是指向函数执行的上下文,但是在不同的情况下,this所指向的上下文可能会有所不同。前端工程师在编写JavaScript代码时,常常会遇到this指向问题,如何准确地理解和掌握this指向的问题,是我们开发高质量JavaScript代码…

    JavaScript 2023年6月10日
    00
  • JavaScript arguments.callee作用及替换方案详解

    JavaScript arguments.callee作用及替换方案详解 引言 在 JavaScript 中,我们经常会用到函数的 arguments 对象。使用 arguments 可以获取函数调用时传入的所有参数,而 arguments.callee 是 arguments 对象的一个属性,它引用当前函数本身。 在 ES5 中,arguments.cal…

    JavaScript 2023年6月10日
    00
  • JavaScript中的原始值和复杂值

    JavaScript中的原始值和复杂值 在JavaScript中,数据类型可以分为两种:原始值和复杂值。 原始值 原始值是最基本的数据类型,它们是不可变的。JavaScript中有5种原始值: 字符串(String):用双引号(”)或单引号(’)包含的字符序列,例如:”Hello World”或’My Name is Peter’。 数字(Number):整…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部