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日

相关文章

  • 魔方在线秒表javascript版

    魔方在线秒表是一款基于JavaScript开发的网页应用,主要用于计时比赛、训练等场景。下面将为大家详细讲解该应用的完整攻略。 安装与运行 下载代码 从GitHub上下载代码:https://github.com/AlgerHwang/Rubik-s-Cube-Online-Stopwatch,或者通过Git命令克隆仓库: git clone https:/…

    JavaScript 2023年5月27日
    00
  • 通过JS来判断页面控件是否获取焦点

    通过JS来判断页面控件是否获取焦点,可以使用DOM的focus和blur事件进行判断。当页面控件获得焦点时,触发focus事件;当失去焦点时,触发blur事件。下面我将介绍两个使用示例: 判断输入框是否获取焦点 为了判断输入框是否获取焦点,需要为该输入框添加focus和blur事件监听器。当input获取焦点时,显示提示框;当失去焦点时,移除提示框。 代码示…

    JavaScript 2023年6月11日
    00
  • 使用vue2.6实现抖音【时间轮盘】屏保效果附源码

    实现抖音【时间轮盘】屏保效果可以分为以下五个步骤: 1. 创建Vue项目 首先需要创建一个Vue项目,可以使用Vue CLI创建,也可以手动创建。 2. 安装所需依赖 在使用Vue2.6实现抖音【时间轮盘】屏保效果中,需要安装vue-router、axios、moment、qs等依赖。 npm install vue-router axios moment …

    JavaScript 2023年6月11日
    00
  • 解析Json字符串的三种方法日常常用

    当你需要从后端获取JSON格式的数据并在前端使用时,你需要解析该JSON字符串,将其转换为JavaScript对象,从而方便你在前端进行数据处理和呈现。下面将介绍三种常用的解析JSON字符串的方法: 1. 手动解析 手动解析JSON是最基本的方法。步骤如下: 使用JSON.parse()将JSON字符串转换为JavaScript对象 访问JavaScript…

    JavaScript 2023年5月27日
    00
  • 原生JS封装animate运动框架的实例

    当我们需要进行网页中的动画操作,很多时候会涉及到DOM元素的运动,比如移动、旋转、透明度变化等等。这时候,JavaScript的animate函数封装可以帮助我们更加方便地实现动画效果。 以下是原生JS封装animate运动框架的实例的完整攻略: 1. 利用JavaScript封装animate运动框架 我们首先需要使用JavaScript来封装animat…

    JavaScript 2023年6月10日
    00
  • layui多iframe页面控制定时器运行的方法

    下面是针对“layui多iframe页面控制定时器运行的方法”的完整攻略。 1. 创建iframe页面 首先,在需要嵌入控制定时器的页面中创建iframe页面,例如: <body> <div class="layui-container"> <div class="layui-row"&g…

    JavaScript 2023年6月11日
    00
  • java构造http请求的几种方式(附源码)

    我来为您详细讲解”Java构造HTTP请求的几种方式”。 1. 使用URLConnection发送HTTP请求 使用URLConnection可以方便的发送HTTP请求。下面是一个使用URLConnection发送get请求的示例代码: public static String sendGetRequest(String url) throws Except…

    JavaScript 2023年6月11日
    00
  • 推荐20家国外的脚本下载网站

    下面是详细讲解“推荐20家国外的脚本下载网站”的完整攻略: 1. 确定搜索关键词 当我们想要寻找国外的脚本下载网站的时候,搜索引擎是我们的好帮手。我们可以使用以下关键词来搜索: script download sites code download sites javascript libraries download free script downloa…

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