助力高考,一组彩色的文字

1、获取文本内容

首先,获取每个<div>元素的文本内容,并清空其内部HTML(innerHTML = "")。

2、创建<span>元素

然后,它遍历文本的每个字符,为每个字符创建一个新的<span>元素,并将该字符设置为<span>元素的文本内容。

3、设置样式

为每个<span>元素设置外边距(marginRight),这样字符之间会有一定的间隔。

4、打乱顺序

使用shuffle函数随机打乱<span>元素的顺序。这个函数通过Fisher-Yates算法实现随机置换。

5、应用随机变换

applyRandomTransform函数为每个<span>元素随机生成位移(xOffset和yOffset)和旋转角度(rotation),并应用CSS的transform属性来改变每个字符的位置和方向。

6、随机颜色变化

changeColorSequentially函数逐个改变<span>元素的颜色,每次只改变一个字符的颜色,并在颜色变化时保持顺序感。它使用getRandomColor函数生成随机颜色代码。

7、定时器

通过setInterval函数,changeColorSequentially和applyRandomTransform函数被定期调用,使得颜色和变换效果持续发生,创建动态变化的效果。

8、文本描边和阴影

在CSS中,使用-webkit-text-stroke-width和-webkit-text-stroke-color为文本添加描边效果,使用text-shadow添加阴影效果,增强文本的视觉效果。

<template>
  <div>
    <!-- <img alt="Vue logo" src="./assets/logo.png"> -->
    <HelloWorld msg="Welcome to Your Vue.js App" />
    <!-- <router-view /> -->
    <div class="bodys">
      <div class="rugrats">高考加油!</div>
      <div class="rugrats">榜上有名!</div>
      <div class="rugrats">繁花似锦!</div>
    </div>
  </div>
</template>

<script>
import HelloWorld from "./components/HelloWorld.vue";

export default {
  name: "App",
  components: {
    HelloWorld,
  },
  mounted() {
    this.init();
  },
  methods: {
    init() {
     
      const divs = document.querySelectorAll(".rugrats");

      divs.forEach(function (div) {
        const text = div.textContent;
        div.innerHTML = "";

        for (let i = 0; i < text.length; i++) {
          const span = document.createElement("span");
          span.textContent = text[i];
          span.style.marginRight = "1vw";
          div.appendChild(span);
        }

        let spans = div.querySelectorAll("span");

        function shuffle(array) {
          for (let i = array.length - 1; i > 0; i--) {
            const j = Math.floor(Math.random() * (i + 1));
            const temp = array[i];
            array[i] = array[j];
            array[j] = temp;
          }
          return array;
        }

        spans = shuffle(Array.from(spans));

        function getRandomValue() {
          return Math.random() * 0.4 - 0.24;
        }

        function applyRandomTransform() {
          spans.forEach(function (span) {
            const xOffset = getRandomValue() * 10;
            const yOffset = getRandomValue() * 15;
            const rotation = getRandomValue() * 6;

            span.style.transform =
              "translate(" +
              xOffset +
              "px, " +
              yOffset +
              "px) rotate(" +
              rotation +
              "deg)";
            span.style.textIndent = xOffset + "px";
          });
        }

        function getRandomColor() {
          const letters = "0123456789ABCDEF";
          let color = "#";
          for (var i = 0; i < 6; i++) {
            color += letters[Math.floor(Math.random() * 16)];
          }
          return color;
        }

        let currentIndex = 0;

        function changeColorSequentially() {
          spans.forEach(function (span, index) {
            let colorIndex = (index + currentIndex) % spans.length;
            span.style.color =
              colorIndex === 0
                ? getRandomColor()
                : spans[colorIndex - 1].style.color;
          });

          currentIndex = (currentIndex + 1) % spans.length;
        }

        setInterval(changeColorSequentially, 250);
        setInterval(applyRandomTransform, 100);
      });
    },
  },
};
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
.bodys {
  margin: 10vh;
  text-align: center;
  font-size: calc(5vw + 4vh);
  background: #314d79;
  color: #fff;
  font-family: sans-serif;
  letter-spacing: -0.3vw;
  overflow: hidden;
  font-family: "Lacquer", system-ui;
}

.rugrats {
  margin: 0 auto;
  text-align: center;
}
.rugrats span {
  display: inline-block;
  transition: color linear 0.5s forwards;
  -webkit-text-stroke-width: 0.32vw;
  -webkit-text-stroke-color: black;
  text-shadow: 0.4vw 0.5vw #000;
}

.rugrats span {
  text-transform: capitalize;
  text-transform: lowercase;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/698474.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Hudi】编译

目录 编译安装编译环境准备编译Hudi上传源码包修改pom文件新增repository加速依赖下载修改依赖的组件版本 修改源码兼容hadoop3手动安装Kafka依赖1&#xff09;下载jar包2&#xff09;install到maven本地仓库 解决spark模块依赖冲突 执行编译命令编译成功 编译安装 编译环境准…

用友U8 表单视图名查询方法

比如要获取【采购订单】表名和视图名 具体操作如下&#xff1a; 先打开写字板&#xff0c;然后进入U8的采购订单做单界面&#xff0c;按住键盘上的&#xff0c;CtrlshiftC&#xff0c;有的是CtrlC&#xff0c;点增加 然后CtrlV到写字板 key就是采购订单的值 打开SQL 输入语句…

AI绘画工具Ideogram测评:和Midjourney不分伯仲的AI图像工具之一

Ideogram 是一款令人印象深刻的人工智能图像工具&#xff0c;但尽管它于去年 8 月推出并具有不可思议的文本渲染能力&#xff0c;但它并没有引起其他一些更引人注目的 GenAI 服务的关注。 随着该公司推出其生成式人工智能模型 1.0 版本&#xff0c;这种情况即将发生改变&#…

Qt OPC UA初体验

介绍 OPC UA全称Open Platform Unified Architecture&#xff0c;开放平台统一架构&#xff0c;是工业自动化领域通用的数据交换协议&#xff0c;它有两套主要的通信机制&#xff1a;1.客户端-服务器通信&#xff1b;2.发布订阅。Qt对OPC UA通信标准也提供了支持&#xff0c;目…

【雷达原理】一维CFAR检测算法——对比分析与代码实现

目录 引言一、仿真实例1.1 均匀背景杂波1.2 杂波边缘1.3 多干扰目标杂波 二、MATLAB代码参考文献 引言 推荐博文【目标检测】雷达目标CFAR检测算法 上述文章介绍了四种典型CFAR检测算法的特点及性能对比。本文将利用MATLAB进行仿真&#xff0c;通过实例验证和对比这几种算法的…

❤ npm运行打包报错归纳

❤ 前端运行打包报错归纳 &#xff08;安装依赖&#xff09;Cannot read property ‘pickAlgorithm’ of null" npm uninstall //删除项目下的node_modules文件夹 npm cache clear --force //清除缓存后 npm install //重新安装 备用安装方式 npm install with --for…

互联网产品经理转型为AI产品经理,我的心得体会

前言 作为一个非AI技术出身的人工智能产品经理&#xff0c;在转行之前会面对很对自我怀疑。在做了4年人工智能产品经理之后&#xff0c;也做了点总结&#xff0c;主要介绍AI产品经理在设计过程中的一些要点&#xff0c;和互联网产品经理9相似的工作内容就没有刻意的去提&#…

PG sql调优案例学习

一&#xff0c;开发范式 1.不要轻易把字段嵌入到表达式 例&#xff1a;在sal列上有索引,但是条件语句中把sal列放在了表达式当中,导致索引被压抑,因为索引里面储存的是sal列的值,而不是sal加上100以后的值。 在条件中查询谁的工资1002000。这样写即使在sal上有索引也会走全表…

cf 欧几里得距离

说明&#xff1a;欧几里得距离本质就是两点间距离 distancesqrt( sum(ai-bi)2 ) Problem - F - Codeforces 代码

跨平台电商数据对比:淘宝与他者的较量

——比较分析淘宝和其他电商平台&#xff08;如京东、拼多多&#xff09;的数据&#xff0c;探索各自的优势和市场定位 在当今的电子商务领域&#xff0c;跨平台电商数据对比成为了企业制定策略和优化运营的重要工具。淘宝作为中国最大的电商平台之一&#xff0c;与京东、拼多…

嵌入式仪器模块:数据记录模块和自动化测试软件

• 32 位分辨率 • 250 KSPS 采样率 • 可以同时并且连续地记录两个通道的电压输入 • 实时上传原始数据至 PC 端 通道22 输入阻抗 电压22 kΩ10 MΩ电流0.2 Ω输入范围电压 250 mV 4.5 V电流1.5 A耦合DCDC带宽450 Hz385 HzADC 分辨率32 Bits24 Bits采样率10 kSPS250 kSPS测…

还在为复制粘贴烦恼吗?这5个工具帮你轻松搞定

在日常工作中&#xff0c;CtrlC和CtrlV无疑是我们使用最为频繁的快捷键组合。 复制粘贴&#xff0c;轻松快捷。 但是在使用中&#xff0c;也会有一点不便&#xff0c;那就是无法保存剪贴历史内容。 比如我说复制之后&#xff0c;我想要想要找回这一次复制之前的内容&#xf…

【APP逆向】央视频播放量增加,逆向全过程解密

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

Vue03-HelloWord

一、Hello World 1-1、示例1 1、现有html容器&#xff1b; 2、再有vue实例。 new Vue({});中的{}是配置对象。配置对象是&#xff1a;key&#xff1a;value的格式。 el&#xff1a;element元素。id对应#&#xff0c;class对应. 把容器中变化的数据&#xff0c;交给Vue实例去保…

OpenCV学习(4.1) 改变颜色空间

1.目标 在本教程中&#xff0c;你将学习如何将图像从一个色彩空间转换到另一个&#xff0c;像BGR↔灰色&#xff0c;BGR↔HSV等除此之外&#xff0c;我们还将创建一个应用程序&#xff0c;以提取视频中的彩色对象你将学习以下功能&#xff1a;cv2.cvtColor&#xff0c;**cv2.i…

在 Visual Studio 2022 中配置 OpenCV

在 Visual Studio 2022 中配置 OpenCV 软件准备系统环境配置VS 2022 环境配置测试 软件准备 Visual Studio 2022 下载链接 OpenCV 下载链接 Visual Studio 的版本与 OpenCV 的 vc 版本需对应好&#xff0c;可以向下兼容&#xff1a; VS 2015 – vc14VS 2017 – vc15VS 2019…

测试开发面经分享,面试七天速成

1. get、post、put、delete的区别 a. get请求&#xff1a; i. 用于从服务器获取资源。请求参数附加在URL的查询字符串中。 ii. 对服务器的请求是幂等的&#xff0c;即多次相同的GET请求应该返回相同的结果。 iii. 可以被缓存&#xff0c;可以被收藏为书签。 iv. 对于敏感数据不…

AI大模型-LangChain基础知识入门

1 什么是LangChain LangChain由 Harrison Chase 创建于2022年10月&#xff0c;它是围绕LLMs&#xff08;大语言模型&#xff09;建立的一个框架&#xff0c;LLMs使用机器学习算法和海量数据来分析和理解自然语言&#xff0c;GPT3.5、GPT4是LLMs最先进的代表&#xff0c;国内百度…

kubernetes(k8s)集群部署(2)

目录 k8s集群类型 k8s集群规划&#xff1a; 1.基础环境准备&#xff1a; &#xff08;1&#xff09;保证可以连接外网 &#xff08;2&#xff09;关闭禁用防火墙和selinux &#xff08;3&#xff09;同步阿里云服务器时间&#xff08;达到集群之间时间同步&#xff09; &…

AXI 1G/2.5G Ethernet Subsystem IP核使用过程中参数配置全解

AXI 1G/2.5G Ethernet Subsystem 是一个为FPGA设计的以太网子系统&#xff0c;它支持1Gbps和2.5Gbps的数据传输速率&#xff0c;使得FPGA能够直接进行高速以太网通信。这个子系统通常包含以太网MAC控制器、GMII&#xff08;千兆媒体独立接口&#xff09;或RGMII&#xff08;简化…