8款前端特效动画及源码分享

news2024/11/18 20:00:33

3D立体数字时钟滚动特效

基于Splitting制作的一款3D立体数字时钟滚动特效,创意感满满,可以下载使用。

预览获取
在这里插入图片描述
核心代码

  <div class="clock">

    <span class="cog hours tens" data-splitting>0123456789</span>
    <span class="cog hours" data-splitting>0123456789</span>
    <span class="colon">:</span>
    <span class="cog minutes tens" data-splitting>0123456789</span>
    <span class="cog minutes" data-splitting>0123456789</span>
    <span class="colon">:</span>
    <span class="cog seconds tens" data-splitting>0123456789</span>
    <span class="cog seconds" data-splitting>0123456789</span>

  </div>

米字格手写文字练习代码

基于Canvas实现的一款米字手写贴,你可以自由的书写你喜欢的文字,同时还支持清除等功能,让你在娱乐中提升自己。

预览获取

在这里插入图片描述
核心代码

<body>

	<!--利用canvas绘画简单田字格-->
	<canvas id="canvas"></canvas>

	<div id="coltroller">
		<div id="clear_btn" class="op_btn" onClick="clean()">清 除</div>
		<div class="clearfix"></div>
	</div>

	<script src="js/canvas.js"></script>
</body>

自定义球体加载特效

是一款可自定义的加载动画,可以通过控制项改变背景颜色、调节弹起的速度快慢、以及弹起的弧度大小等

预览获取

在这里插入图片描述
核心代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义球体加载特效</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    <script src="js/three.min.js"></script>
    <script src="js/OrbitControls.js"></script>
    <script src="js/dat.gui.js"></script>
    <script src="js/index.js"></script>
</body>
</html>

3D旋转变换进度条动画

非常有个性的一款3D加载动画特效,由点与线的运动构成带有3D立体动画视觉效果,可适用于网页的加载动画。

预览获取

在这里插入图片描述
核心代码

<body>
  <div class="spinner">
    <div class="spin">
      <div class="branch"></div>
      <div class="branch"></div>
      <div class="branch"></div>
    </div>
  </div>
  <div class="spinner">
    <div class="spin">
      <div class="branch"></div>
      <div class="branch"></div>
      <div class="branch"></div>
    </div>
  </div>
  ... +14
 </body>

粒子流动爱心动画特效

基于Canvas实现的一款爱心粒子流动特效,极具观赏性。

预览获取

在这里插入图片描述
核心代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>粒子流动爱心形状动画特效</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    <canvas id="canvas"></canvas>
    <script src='js/blgjlm.js'></script>
    <script src="js/index.js"></script>
</body>
</html>

气泡浮动上升特效

气泡浮动上升特效是基于Css和Js制作的一款上升动画特效,实现不同大小多种颜色带透明度的泡泡向上浮动画面。

预览获取

在这里插入图片描述

核心代码

<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<title>气泡浮动上升特效</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="bubbles">
  <div class="bubble"></div>
  <div class="bubble"></div>
  ... + 398
 </div>
 <script  src="js/script.js"></script>
</body>
</html>

鼠标移动圆点粒子跟随特效

观赏性非常强的一款HTML5 Canvas鼠标移动圆点粒子跟随动画特效,鼠标移动圆点粒子出现并跟随鼠标指针移动,不动时圆点粒子则渐渐消失。

预览获取

在这里插入图片描述
核心代码

<body>
    <h1>
        别害羞, 把鼠标挪过来!
    </h1>
    <canvas></canvas>
    <script>
        // 创建Canvas对象及设置宽高
        var canvas = document.querySelector('canvas');
        canvas.height = window.innerHeight;
        canvas.width = window.innerWidth;
        c = canvas.getContext('2d');

        // 监听窗口大小变化
        window.addEventListener('resize', function () {
            canvas.height = window.innerHeight;
            canvas.width = window.innerWidth;

            initCanvas();
        })

        // 设置鼠标位置
        var mouse = {
            x: undefined,
            y: undefined
        }

        // 监听鼠标移动事件
        window.addEventListener('mousemove',
            function (event) {
                mouse.x = event.x;
                mouse.y = event.y;
                drawCircles();
            }
        )

        // 监听触摸事件
        window.addEventListener("touchmove",
            function (event) {
                let touch = event.touches[0];
                mouse.x = touch.clientX;
                mouse.y = touch.clientY;
                drawCircles();
            }
        )

        // 创建圆点对象
        function Circle(x, y, radius, vx, vy, rgb, opacity, birth, life) {
            this.x = x;
            this.y = y;
            this.radius = radius;
            this.minRadius = radius;
            this.vx = vx;
            this.vy = vy;
            this.birth = birth;
            this.life = life;
            this.opacity = opacity;

            this.draw = function () {
                c.beginPath();
                c.arc(this.x, this.y, this.radius, Math.PI * 2, false);
                c.fillStyle = 'rgba(' + rgb + ',' + this.opacity + ')';
                c.fill();
            }

            this.update = function () {
                if (this.x + this.radius > innerWidth || this.x - this.radius < 0) {
                    this.vx = -this.vx;
                }

                if (this.y + this.radius > innerHeight || this.y - this.radius < 0) {
                    this.vy = -this.vy;
                }

                this.x += this.vx;
                this.y += this.vy;

                this.opacity = 1 - (((frame - this.birth) * 1) / this.life);

                if (frame > this.birth + this.life) {
                    for (let i = 0; i < circleArray.length; i++) {
                        if (this.birth == circleArray[i].birth && this.life == circleArray[i].life) {
                            circleArray.splice(i, 1);
                            break;
                        }
                    }
                } else {
                    this.draw();
                }
            }

        }

        // 创建圆点数组
        var circleArray = [];

        // 初始化圆点数组
        function initCanvas() {
            circleArray = [];
        }

        // 色块数组
        var colorArray = [
            '355,85,80',
            '9,80,100',
            '343,81,45'
        ]

        // 绘制圆点
        function drawCircles() {
            for (let i = 0; i < 6; i++) {
                let radius = Math.floor(Math.random() * 4) + 2;
                let vx = (Math.random() * 2) - 1;
                let vy = (Math.random() * 2) - 1;
                let spawnFrame = frame;
                let rgb = colorArray[Math.floor(Math.random() * colorArray.length)];
                let life = 100;
                circleArray.push(new Circle(mouse.x, mouse.y, radius, vx, vy, rgb, 1, spawnFrame, life));

            }
        }

        var frame = 0;

        // 动画循环
        function animate() {
            requestAnimationFrame(animate);
            frame += 1;
            c.clearRect(0, 0, innerWidth, innerHeight);
            for (let i = 0; i < circleArray.length; i++) {
                circleArray[i].update();
            }

        }

        initCanvas();
        animate();

        // 模拟鼠标移动
        for (let i = 1; i < 110; i++) {
            (function (index) {
                setTimeout(function () {
                    mouse.x = 100 + i * 10;
                    mouse.y = 100;
                    drawCircles();
                }, i * 10);
            })(i);
        }
    </script>
</body>

文字放射性发光特效

基于Canvas实现的一款文字展示特效

预览获取

在这里插入图片描述
核心代码

<body>
  <canvas id="canvas"></canvas>
  <script>
    var txt = "你相信光吗";
    var txtH = 100;
    var font = "sans-serif";
    var bg = "#000";
    var rayColor1 = "#e0f7fa";
    var rayColor2 = "#18ffff";
    var fade = 1000;

    var canvas = document.getElementById("canvas");
    var ctx = canvas.getContext("2d");
    var cw = canvas.width = window.innerWidth;
    var ch = canvas.height = window.innerHeight;

    var w2 = cw / 2;
    var h2 = ch / 2;
    var pi = Math.PI;
    var pi2 = pi * .5;

    var txtCanvas = document.createElement("canvas");
    var txtCtx = txtCanvas.getContext("2d");
    txtCtx.font = txtH + "px " + font;
    txtCtx.textBaseline = "middle";
    var txtW = Math.floor(txtCtx.measureText(txt).width);
    txtCanvas.width = txtW;
    txtCanvas.height = txtH * 1.5;

    var gradient = ctx.createRadialGradient(w2, h2, 0, w2, h2, txtW);
    gradient.addColorStop(0, rayColor2);
    gradient.addColorStop(1, rayColor1);
    ctx.strokeStyle = gradient;

    txtCtx.fillStyle = gradient;
    txtCtx.font = txtH + "px " + font;
    txtCtx.textBaseline = "middle";
    txtCtx.fillText(txt, 0, txtH * .5);

    //dirty adjust for descends
    txtH *= 1.5;

    var bufferCanvas = document.createElement("canvas");
    bufferCanvas.width = txtW;
    bufferCanvas.height = txtH;
    var buffer = bufferCanvas.getContext("2d");

    //text start position
    var sx = (cw - txtW) * 0.5
    var sy = (ch - txtH) * 0.5

    generate data
    var rays = [];
    var txtData = txtCtx.getImageData(0, 0, txtW, txtH);
    for (var i = 0; i < txtData.data.length; i += 4) {
      var ii = i / 4;
      var row = Math.floor(ii / txtW)
      var col = ii % txtW
      var alpha = txtData.data[i + 3]
      if (alpha !== 0) {
        var c = "rgba("
        c += [txtData.data[i], txtData.data[i + 1], txtData.data[i + 2], alpha / 255]
        c += ")";
        rays.push(new Ray(Math.floor(ii / txtW), ii % txtW, c));
      }
    }

    var current = 1;
    //start animation
    tick();

    function tick() {
      ctx.clearRect(0, 0, cw, ch)
      ctx.drawImage(bufferCanvas, 0, 0, current, txtH, sx, sy, current, txtH)
      ctx.save()
      ctx.globalAlpha = .07;
      ctx.globalCompositeOperation = "lighter";
      if (drawRays(current)) {
        current++;
        current = Math.min(current, txtW)
        window.requestAnimationFrame(tick)
      } else {
        fadeOut()
      }
      ctx.restore()
    }

    function fadeOut() {
      ctx.clearRect(0, 0, cw, ch)
      ctx.globalAlpha *= .95;
      ctx.drawImage(bufferCanvas, 0, 0, current, txtH, sx, sy, current, txtH)
      if (ctx.globalAlpha > .01) {
        window.requestAnimationFrame(fadeOut)
      } else {
        window.setTimeout(restart, 500)
      }
    }
    function restart() {
      for (var i = 0; i < rays.length; i++) {
        rays[i].reset()
      }
      ctx.globalAlpha = 1
      buffer.clearRect(0, 0, txtW, txtH)
      current = 1;
      tick();
    }
    function drawRays(c) {
      var count = 0;
      ctx.beginPath()
      for (var i = 0; i < rays.length; i++) {
        var ray = rays[i];
        if (ray.col < c) {
          count += ray.draw()
        }
      }
      ctx.stroke()
      return count !== rays.length;
    }

    function filterRays(r) {
      return Boolean(r);
    }

    function Ray(row, col, f) {
      this.col = col;
      this.row = row;

      var xp = sx + col;
      var yp = sy + row;
      var fill = f;

      var ath = (txtH / 1.5)

      var a = pi2 * (this.row - ath * .5) / ath;
      if (a === 0) {
        a = (Math.random() - .5) * pi2;
      }
      var da = .02 * Math.sign(a);
      da += (Math.random() - .5) * .005;
      var l = 0;
      var dl = Math.random() * 2 + 2;

      var buffered = false;
      this.reset = function () {
        a = pi2 * (this.row - ath * .5) / ath;
        if (a === 0) {
          a = -pi2 * .5;
        }
        l = 0;
        buffered = false
      }
      this.draw = function () {
        if (l < 0) {
          if (!buffered) {
            buffer.fillStyle = fill;
            buffer.fillRect(this.col, this.row, 1, 1);
            buffered = true
          }
          return 1;
        } else {
          ctx.moveTo(xp, yp)
          ctx.lineTo(xp + Math.cos(a) * l, yp + Math.sin(a) * l);
          a += da;
          l += Math.cos(a) * dl;
          return 0;
        }
      }
    }
  </script>
</body>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java SSM框架实现实现四六级英语报名系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现四六级英语报名系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个高校四六级报名管理系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作…

深入了解 CPU 的型号、代际架构与微架构!

CPU 在整个计算机硬件中、技术体系中都算是最最重要的东西了。在 10 月 16 号的时候&#xff0c;Intel 正式发布了第 14 代的酷睿处理器。但很多同学看不懂这种发布会上发布的各种 CPU 参数。 今天借着这个时机&#xff0c;从 CPU 硬件相关的技术细节切入&#xff0c;来深入地…

unity学习笔记12

一、物理系统 如何让一个球体受到重力的影响&#xff1f; 只要给物体添加刚体组件&#xff08;Rigidbody&#xff09;&#xff0c;就可以使其受到重力影响 1.刚体&#xff08;Rigidbody&#xff09;&#xff1a; 刚体是一个组件&#xff0c;用于使游戏对象受到物理引擎的控制。…

Linux 问题“:对pthread_create未定义的引用“解决方案

用vs2019写多线性程时需要使用pthread_create()用于创建线程,项目里加了所需要的头文件#include <pthread.h>但编译却报对pthread_create未定义的引用的错误,根本原因是没有包含所需要的库 在Linux下用gcc编译报错: 解决方案1: 1 右键项目选择属性 2找的链接器下的输入…

Linux socket编程(8):shutdown和close的区别详解及例子

在Linux中有两种操作可以终止socket间的进程通信&#xff1a;close和shutdown。但这两种函数在使用时有着不同的行为和效果。在网络编程中&#xff0c;正确地选择和使用这些操作至关重要&#xff0c;因为它们直接影响着通信的结束和资源的释放。本文将介绍close和shutdown函数&…

ESP32-Web-Server编程- WebSocket 编程

ESP32-Web-Server编程- WebSocket 编程 概述 在前述 ESP32-Web-Server 实战编程-通过网页控制设备的 GPIO 中&#xff0c;我们创建了一个基于 HTTP 协议的 ESP32 Web 服务器&#xff0c;每当浏览器向 Web 服务器发送请求&#xff0c;我们将 HTML/CSS 文件提供给浏览器。 使用…

Linux相关--笔试和面试高频

Linux RedHat公司已经宣布停止维护CentOS服务器操作系统&#xff0c;可以选择华为开源的欧拉系统、阿里开源的龙蜥系统和腾讯开源的TencentOS系统 面试 几个基本的Linux命令 pwd #查看当前绝对路径 结果/home/stu touch / vi编辑器 #创建文件 mkdir -p /home/stu/test #当…

智能工厂是什么?

今天就聊聊企业智能工厂的打造&#xff0c;企业想实现数字化转型建立智能工厂&#xff0c;就需要先建设数字化车间&#xff0c;可以说数字化车间是建设智能工厂的重要一环&#xff0c;智能工厂的基础是数字化车间。数字化车间可以实现企业生产过程中车间计划调度、工艺执行管理…

高项备考葵花宝典-项目范围管理输入、输出、工具和技术

项目范围管理包括确保项目“做”且“只做”所需的全部工作&#xff08;即不能少做&#xff0c;也不能多做&#xff0c;如果多做&#xff0c;就要消耗团队额外的时间和资源&#xff0c;并且无法被认可&#xff09;&#xff0c;以成功完成项目。项目范围管理主要在于定义和控制哪…

【MySQL数据库】SQL查询语句总结

目录 一、查询数据 1.1 基本查询语句 1.2 表单查询 1.3 WHERE子句 1.3.1 IN关键字查询 1.3.2 Between查询范围 1.3.3 Like匹配查询 1.3.4 AND多条件查询&#xff08;等同于&&&#xff09; 1.3.5 OR多条件查询&#xff08;等同于||&#xff09; 1.3.6 LIMIT子句 1.3.7 对…

聚观早报 |亚马逊AWS发布新AI芯片;拼多多Q3营收增长94%

【聚观365】11月30日消息 亚马逊AWS发布新AI芯片 拼多多Q3营收增长94% Redmi K70全新国风配色揭晓 英伟达扩大自动驾驶中国团队 华为nova 12参数细节曝光 亚马逊AWS发布新AI芯片 在美国时间周二举办的Reinvent大会上&#xff0c;亚马逊旗下的云计算部门AWS发布了新的人工…

【开源视频联动物联网平台】为什么需要物联网网关?

在一些物联网项目中&#xff0c;物联网网关这一产品经常被涉及。那么&#xff0c;物联网网关究竟有何作用&#xff1f;具备哪些功能&#xff1f;同时&#xff0c;我们也发现有些物联网设备并不需要网关。那么&#xff0c;究竟在何时需要物联网网关呢&#xff1f; 物联网的架构…

linux安装minIo(亲测可用)

一、创建文件夹 进入opt文件夹 cd /opt/创建minio文件夹&#xff1b; mkdir minio赋予权限 chmod 777 minio/执行完后查看目录 进到minio文件夹 创建bin目录 mkdir bin创建data目录 mkdir data创建log touch minio.log创建start.sh文件&#xff0c;并写入数据(不会vi或…

Stream API练习题

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 考虑到Stream API在实际…

abapgit 安装及使用

abapgit 需求 SA[ BASIS 版本 702 及以上 版本查看路径如下&#xff1a; 安装步骤如下&#xff1a; 1. 下载abapgit 独立版本 程序 链接如下&#xff1a;raw.githubusercontent.com/abapGit/build/main/zabapgit_standalone.prog.abap 2.安装开发版本 2.1 在线安装 前置条…

智慧公厕为城市智慧管理提供强力有的数据支持

在当今科技飞速发展的时代&#xff0c;城市管理正面临着前所未有的挑战与机遇。而在这个城市发展的脚步日新月异的同时&#xff0c;一项看似不起眼的技术却正在默默地为城市的智慧管理提供着强有力的支持——那就是智慧公厕。这些不起眼的公共设施不仅仅是人们日常生活的一部分…

Linux系统平均负载

我们经常会使用 top 命令来查看系统的性能情况&#xff0c;在 top 命令的第一行可以看到 load average 这个数据&#xff0c;如下图所示&#xff1a; load average 包含 3 列&#xff0c;分别表示 1 分钟、5 分钟和 15 分钟的 系统平均负载 系统平均负载&#xff1a; 如果将 …

多媒体信号处理复习笔记 --脑图版本

多媒体信号处理复习笔记 --脑图版本 依据 [2020多媒体信号处理复习笔记] 考前复习时使用Xmind制作 例图: PDF下载 BaiduYunPan 提取码&#xff1a;jbyw CSDN 下载

LeetCode2514.统计同位异构字符串数目

题目简单&#xff0c;关键是灵茶山艾府的代码写起来太优美&#xff0c;不得不记录一下 const int Mod 1e97; using ll long long; ll qmi(ll a,ll b,ll mod){ll res 1;while(b){if(b&1)res res*a%mod;aa*a%mod;b>>1;}return res; }class Solution { public:int c…

[黑皮系列] 计算机网络:自顶向下方法(第8版)

文章目录 《计算机网络&#xff1a;自顶向下方法&#xff08;第8版&#xff09;》简介作者目录前言配套公开课 《计算机网络&#xff1a;自顶向下方法&#xff08;第8版&#xff09;》 出版信息&#xff1a; 原作名: Computer Networking: A Top-Down Approach 作者: [美] Jame…