canvas动画效果新年祝福话语
html代码
<ul id="ul"></ul>
css代码
* {
margin:;
padding:;
}
ul {
list-style: none;
position: relative;
}
ul.slow li {
transition: 2.4s all;
}
li {
width: var(--rect-width);
height: var(--rect-width);
position: absolute;
transition: 2s all;
left:;
top:;
background: black;
opacity:;
transform: translate(500px, 100px);
}
js代码
"use strict";
const rectWidth = parseFloat(document.documentElement.style.getPropertyValue('--rect-width'));
const canvas = document.createElement('canvas');
canvas.width = 100;
canvas.height = 20; const ctx = canvas.getContext('2d');
ctx.font = '100 18px monospace';
ctx.textBaseline = 'top';
ctx.textAlign = 'center';
const ul = document.getElementById('ul'); function drawText(text) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
const gradient = ctx.createLinearGradient(10, 0, canvas.width - 10, 0);
gradient.addColorStop(0, 'red');
gradient.addColorStop(1 / 6, 'orange');
gradient.addColorStop(2 / 6, 'yellow');
gradient.addColorStop(3 / 6, 'green');
gradient.addColorStop(4 / 6, 'blue');
gradient.addColorStop(5 / 6, 'indigo');
gradient.addColorStop(1, 'violet');
ctx.fillStyle = gradient;
ctx.fillText(text, canvas.width / 2, 2);
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
let iLi = 0;
for (let column = 0; column < imageData.width; column++) {
for (let row = 0; row < imageData.height; row++) {
const idx = ((row * imageData.width) + column) * 4;
if (imageData.data[idx + 3] > 0) {
const li = ul.children[iLi++];
li.style.opacity = '1';
li.style.transform = `translate(
${column * rectWidth}px,
${row * rectWidth}px)
scale(1.5)`;
li.style.background =
`rgba(${imageData.data[idx]},${imageData.data[idx + 1]},${imageData.data[idx + 2]},${imageData.data[idx + 3] / 255})`;
}
}
}
while (iLi < 2000) {
const li = ul.children[iLi++];
li.style.opacity = '0';
}
} const timeout = t => new Promise(resolve => setTimeout(resolve, t)); void async function main() {
const duration = 2500;
{
let i = 2000;
const fragment = document.createDocumentFragment();
while (i-- > 0) {
fragment.appendChild(document.createElement('li'));
}
ul.appendChild(fragment);
} await timeout(100); drawText('新年愿望');
await timeout(duration); drawText('身体健康');
await timeout(duration); drawText('有很多钱');
await timeout(duration); ul.classList.add('slow');
drawText('新年快乐!');
}();
效果图

canvas动画效果新年祝福话语的更多相关文章
- HTML5 Canvas动画效果演示
HTML5 Canvas动画效果演示 主要思想: 首先要准备一张有连续帧的图片,然后利用HTML5 Canvas的draw方法在不同的时间 间隔绘制不同的帧,这样看起来就像动画在播放. 关键技术点: ...
- HTML5 Canvas动画效果演示 - 流浪的鱼 - 博客频道 - CSDN.NET
HTML5 Canvas动画效果演示 - 流浪的鱼 - 博客频道 - CSDN.NET HTML5 Canvas动画效果演示
- HTML5 Canvas动画效果实现原理
在线演示 使用HTML5画布可以帮助我们高速实现简单的动画效果.基本原理例如以下: 每隔一定时间绘制图形而且清除图形,用来模拟出一个动画过程,能够使用context.clearRect(0, 0, x ...
- 7个惊艳的HTML5 Canvas动画效果及源码
HTML5非常强大,尤其是现在大部分浏览器都支持HTML5和CSS3,用HTML5制作的动画也多了起来.另外,Canvas上绘制图形非常简单,本文就分享了一些强大的HTML5 Cnavas动画,一起来 ...
- 基于canvas实现物理运动效果与动画效果(一)
一.为什么要写这篇文章 某年某月某时某种原因,我在慕课网上看到了一个大神实现了关于小球的抛物线运动的代码,心中很是欣喜,故而写这篇文章来向这位大神致敬,同时也为了弥补自己在运动效果和动画效果制作方面的 ...
- CodePen 作品秀:Canvas 粒子效果文本动画
作品名称——Shape Shifter,基于 Canvas 的粒子图形变换实验.在页面下方的输入框输入文本,上面就会进行变换出对应的粒子效果文本动画. CodePen 作品秀系列向大家展示来自 Cod ...
- 使用Canvas实现动画效果 | DKlogs -- 设计 | 生活
使用Canvas实现动画效果 | DKlogs -- 设计 | 生活 使用Canvas实现动画效果
- [js高手之路]html5 canvas动画教程 - 边界判断与小球粒子模拟喷泉,散弹效果
备注:本文后面的代码,如果加载了ball.js,那么请使用这篇文章[js高手之路] html5 canvas动画教程 - 匀速运动的ball.js代码. 本文,我们要做点有意思的效果,首先,来一个简单 ...
- 更新——Canvas画布动画效果之实现倒计时
Hello,大家好! 小W复活啦!继续欢乐的给大家更博,输送新知识~~ 不开玩笑啦!秒进正题~~~ 上次更博,小W给大家介绍了Canvas画布的基础部分,以及实现了一个由7*10点阵图显示的倒计时的基 ...
随机推荐
- 五、MongoDB的索引
一.MongoDB的下载.安装与部署 二.MongoDB的基础知识简介 三.MongoDB的创建.更新和删除 四.MongoDB的查询 五.MongoDB的索引 1.简介 它就像是一本书的目录,如果没 ...
- Centos系统安装InfluxDB
概述安装influxDB时需要root用户或者管理员权限. 端口默认情况下,InfluxDB会使用如下的端口: * TCP8086端口是服务器监听端口,对HTTP API响应 * TCP8088端口是 ...
- Thinking in Java from Chapter 10
From Thinking in Java 4th Edition 内部类 public class Parcel1 { class Contents { private int i = 11; pu ...
- string Type
Notes from C++ Primer Operations Operations of string support lots of operations of sequential conta ...
- 三菱蓝瑟CK4A
日本JDM蓝瑟,而且还是MR的性能版,避震行程也是这么长的.证明这个车子就是这样设计的. 90年代拉力血统的车就这样? 东南厂国产的蓝瑟,原装避震是厦门开发生产,来自于台湾开发工业集团的全资子公司,而 ...
- JavaScript中JSON对象和JSON字符串的相互转化
一.JSON字符串转换为JSON对象 var str = '{"name":"cxh","sex":"man",&quo ...
- Linux内核源码分析之调度、内核线程模型 And Centos7.2's Kernel Resource Analysis
本文分为概述.历史.el7.2代码架构图解三部分. 解决的问题: a.Kernel调度发展过程: b.以架构图的方式,详解el7.2具体调度实现.内核线程模型.调度时间片计算,以及探究整个Kernel ...
- Eclipse 工程目录下的.classpath、.project文件和.settings文件作用
1..classpath 定义了你这个项目在编译时所使用的$CLASSPATH (注: 每次在更新jar的版本或者增加jar之后,请在SVN提交.classpath文件,否则工程的build path ...
- Linux编程 8 (挂载mount,查看磁盘df du,搜索grep,压缩zgip,归档tar)
一. 挂载存储媒体 linux文件系统将所有的磁盘都并入一个虚拟目录下,当使用新的存储媒体之前,需要把它放到虚拟目录下,这项工作称为挂载(mounting) 1.1 mount 命令 在linux上用 ...
- TCP/IP 笔记 - Internet协议
IP是TCP/IP协议族中的核心协议,TCP.UDP.ICMP.IGMP数据都通过IP数据报传输.IP提供了一种"尽力而为.无连接"的数据交付服务:尽力而为表示不保证IP数据报能成 ...