圣诞临近,小包送给大家一个雪人,一群麋鹿,一堆糖果,一句祝福,圣诞快乐!

简介: 圣诞临近,小包送给大家一个雪人,一群麋鹿,一堆糖果,一句祝福,圣诞快乐!

前言


圣诞快要来临了,几天前小包设想了一个巨好的创意(自我感觉自我感觉🎈),但昨天中午突然灵光一动,有了新点子,圣诞前估计是不能预期交付了,那就元旦见吧~~~。


于是小包就改变了主意,大创意做不了,就来点小零头。本来想画个圣诞树,但顶不住圣诞树界实在太卷了,已经有诸多大佬绘制出各种奇思妙想的圣诞树,非常的好看,非常的炫酷。例如:


image.png


所以小包准备另辟蹊径,脱离树卷界,来实现一些圣诞的周边,比如雪人,麋鹿,以及给大家送上精心准备的糖果和小包的祝福语。本文核心是祝福,祝福大家开开心心、快快乐乐,高举不卷大旗,我辈义不容辞!


雪人


雪人主要由三部分组成: 树、雪人、雪花。


树是由简单三角形和矩形实现的,实现起来比较简单。


雪人也是由简单的图形构成的,但具体实现还是有几分趣味和可爱的,比如雪人的嘴唇其实就是字母 C 配合 -90deg 的旋转实现,雪人的小手配合 :before/:after 伪类实现。


雪花的实现没有借助 JS ,使用 animationinfinite 属性实现。


静态效果图


image.png

麋鹿


小包本来想模仿画一下麋鹿,但发现属实没有这本事啊,不止画不出来,连麋鹿都联想不出来💔。


麋鹿象征着吉祥,圣诞周边麋鹿可是必需品啊。因此小包找到一些巨佬绘制的麋鹿,送给大佬们,希望圣诞节那天,七彩麋鹿会拉着圣诞老人满足你所有的愿望。


麋鹿与圣诞老人


示例说明:三只麋鹿拉着圣诞老人在雪花中奔跑

示例来源: Merry Christmas


Gif 动态效果图


image.png

可爱麋鹿


示例说明:一只可可爱爱的小麋鹿

示例来源: the red-nosed reindeer


静态效果图


image.png

呆呆麋鹿


示例说明:一只呆呆萌萌的小麋鹿

示例来源: CSS Rudolph


静态效果图


image.png

炫酷麋鹿


示例说明:基于SVG实现的炫酷麋鹿

示例来源: crazyLowPolyDeer


Gif 动态效果图


image.png

糖果


糖果是小包在文字粒子的基础上实现的,图片选取了一张小包特别喜欢的,糖果比较多的图片,通过粒子组装完成。


实现思路


图片例子与文字粒子实现大同小异,核心在于副画布由绘制文字修改为绘制图片,主要难点在于处理图片,一方面图片存在跨域问题,需要设置 image.crossOrigin = "Anonymous" 属性;另一方面,图片加载是个异步过程,因此使用 Promise 进行异步处理。


接下来的流程与文字粒子相同: 提取像素,根据像素绘制粒子,设计粒子的运动函数,生成最后的动画即可。


// 初始化副画布,并绘制图片
function initCanvas(ctx, { width, height }) {
    var image = new Image();
    image.src = "candy.jfif";
    image.crossOrigin = "Anonymous";
    return new Promise((res) => {
        image.onload = function () {
            ctx.drawImage(image, 0, 0, width, height);
            //将图片按像素写入画布
            res();
        };
    });
}
复制代码


动图加载过程中,大家可以猜猜小包给大家准备了几块糖啊?


Gif 动态效果图


image.png

祝福语


接下来送上小包亲手写的祝福,虽说字写得一般啊,但情谊十足啊。


image.png

拉个票:明天就是年度优秀创作者的评选了,有喜欢小包的别忘了给小包投一票啊


源码仓库


源码地址: 圣诞周边


如果感觉有帮助的话,别忘了给小包点个 ⭐ 。




相关文章
|
NoSQL Java Redis
服务端如何防止订单重复支付!
如图是一个简化的下单流程,首先是提交订单,然后是支付。 支付的话,一般是走支付网关(支付中心),然后支付中心与第三方支付渠道(微信、支付宝、银联)交互。 支付成功以后,异步通知支付中心,支付中心更新自身支付订单状态,再通知业务应用,各业务再更新各自订单状态。
服务端如何防止订单重复支付!
|
8月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
377 0
|
7月前
|
数据采集 分布式计算 数据可视化
阿里Dataphin评测
作为一名后端开发工程师,我通过体验阿里巴巴的Dataphin对数据治理有了更深理解。Dataphin基于OneData方法论,提供一站式数据采集、建模、管理与分析能力,助力企业高效处理海量数据并支持业务决策。在实际操作中,我完成了项目创建、离线管道任务开发、SQL计算任务、数据补充及即席分析等功能体验,感受到其强大的数据处理能力和便捷性。不过,在大体量数据查询时性能稍显不足,且对非主流数据源支持有限。总体而言,Dataphin是一款功能全面的数据治理工具,适合企业数字化转型需求,未来潜力巨大。
187 1
|
12月前
|
Java 编译器 测试技术
Kotlin31 协程如何与 Java 进行混编?
Kotlin31 协程如何与 Java 进行混编?
182 2
Kotlin31 协程如何与 Java 进行混编?
|
11月前
|
人工智能 数据挖掘
AI长脑子了?LLM惊现人类脑叶结构并有数学代码分区,MIT大牛新作震惊学界!
麻省理工学院的一项新研究揭示了大型语言模型(LLM)内部概念空间的几何结构,与人脑类似。研究通过分析稀疏自编码器生成的高维向量,发现了概念空间在原子、大脑和星系三个层次上的独特结构,为理解LLM的内部机制提供了新视角。论文地址:https://arxiv.org/abs/2410.19750
251 12
|
存储 程序员 C++
【Python 基础教程 03 类型转换】从隐式到显式:全面理解Python数据类型转换的超详细初学者入门教程
【Python 基础教程 03 类型转换】从隐式到显式:全面理解Python数据类型转换的超详细初学者入门教程
623 0
|
SQL XML 存储
Idea Mybatis插件:提高CRUD效率
将mybatis xml转成真实SQL语句、参数mock、SQL规范检查、SQL索引检查、SQL运行、SQL压测及Mybatis SQL语句扫描
1187 1
Idea Mybatis插件:提高CRUD效率
|
存储 缓存 固态存储
【Linux】常用文件系统简述
Linux操作系统支持多种类型的文件系统,在这里我将简要介绍几种常见的Linux文件系统。
732 0
|
Kubernetes 容器
k8s证书过期带来的问题解决
解决k8s自带签名证书过期后,节点状态为NotReady的恢复。
601 0
|
域名解析 存储 缓存
通过Wireshark抓包分析谈谈DNS域名解析的那些事儿
通过Wireshark抓包分析谈谈DNS域名解析的那些事儿
673 0
下一篇
开通oss服务