使用Emscripten编译Eigen算法模块为WebAssembly

news2025/7/29 22:14:24

前言

最近大降温,才意识到秋天是真的来了。古人有诗云:“眉如青山黛,眼似秋波横。”这足以说明秋天的水是多么的浪漫、多情、温柔。

秋天都懂得浪漫,你天天被人说木讷,何不做点改变?今天我来教大家属于程序员的浪漫——使用 CSS 搭配 JS 实现爱心跟随鼠标发散效果。

添加文字

首先当然要将我们的文字添加上去啦。

<body><div id="text">CatWatermelon</div>
</body> 

很简单是不是,这才开始呢,我们接下来绘制背景先。

绘制背景

首先老规矩,我们将 CSS 样式重置 ,方便各个浏览器统一展示效果。

* {margin: 0;padding: 0;box-sizing: border-box;
} 

ps:大家开发的时候可不敢这么写,要不代码是上午写的,桶是下午提的了。

接下来通过添加 min-height: 100vh 属性,将 body 限制为 视口大小 且通过 overflow: hidden 来将 超出部分隐藏

body {min-height: 100vh;background-color: #111;overflow: hidden;display: flex;justify-content: center;align-items: center;
} 

注意这里用了 flex 布局实现了 水平垂直居中。小伙伴们平时喜欢什么方式来实现这个效果呢?

我们开始正戏前,先看看目前的效果:

没啥问题,也不该有啥问题,可以接着走了。

爱心生成并跟随

这部分我们需要思考三个问题。

三个问题

1.怎么生成爱心,什么时候生成?
2.生成的爱心怎么跟随鼠标?
3.怎么让爱心消失?

爱心生成

我们一个一个看,首先是生成爱心,爱心我们可以用一张 透明爱心图片 充当,这里之所以要透明图片是因为防止 body 背景色和图片产生色差,影响美观。具体的,我们可以用一个容器 span ,将其背景 background 设置为这个爱心图片。如下所示:

span::before {content: "";position: absolute;width: 100px;height: 100px;background: url(./static/1.png);background-size: cover;
} 

那么承载爱心的容器 span 应该在什么时候生成呢?明显的,我们鼠标移动的时候,会不停的创建小心心,那么我们应该在鼠标移动事件 mousemove 触发时,在回调中不断的通过 document.createElement 创建 span

跟随鼠标

创建好爱心后,我们为了实现爱心跟随鼠标的效果,应该将新生成的爱心的位置和鼠标位置同步。在 mousemove 事件中,回调函数的入参 e 对象中包含了 offsetXoffsetY 两个属性,通过这两个属性,我们就可以知道当前鼠标的位置,此时将爱心的位置也设置为 (offsetX, offsetY),就可以实现爱心跟随的效果了。

爱心消失

爱心消失我们可以设定一个时间,比如一秒,在上面创建 span 标签时,设置一个 setTimeout 定时器,指定一秒后通过实例调用 remove 方法,就可以实现爱心一秒后消失的效果啦。

document.addEventListener('mousemove', function(e) {let body = document.querySelector('body');let heart = document.createElement('span');let x = e.offsetX;let y = e.offsetY;heart.style.left = x + 'px';heart.style.top = y + 'px';body.appendChild(heart);setTimeout(() => {heart.remove();}, 1000)
}) 

看看效果:

可以发现稍微有点僵硬,我们尝试给爱心一个边向后偏移边旋转的动画试试:

span::before {...animation: moveShape 1s linear infinite;
}
@keyframes moveShape {0% {transform: translate(0) rotate(0deg);}100% {transform: translate(300px) rotate(360deg);}
} 

效果好很多啦,让我们继续添砖加瓦。

随机大小

如果我们能将每个爱心都设置成不同大小就好了,随机的大小像冒泡泡一样,显得更可爱。

我们可以通过一个随机数,来改变爱心容器 span 的大小。为了让每个 span 大小不会相差太多,我们可以用一个 固定宽高 作为基数,然后加上随机得到的一个数,作为最终的宽高。

document.addEventListener('mousemove', function(e) {...let size = Math.random() * 80;heart.style.width = 20 + size + 'px';heart.style.height = 20 + size + 'px';body.appendChild(heart);
}) 

Math.random 方法返回的是 [0, 1) 之间的数,因此我们乘上一个系数放大 80,才更明显。

我们来看看此时的效果:

不错,味道好极了,啊不,是效果好极了,如果能加点旋转就好了。

让爱心转起来

同样的,我们可以用刚刚的思路,通过 rotate 属性动态的改变每个爱心的角度。

document.addEventListener('mousemove', function(e) {...let transformValue = Math.random() * 360;heart.style.transform = `rotate(${transformValue}deg)`;body.appendChild(heart);
}) 

这里的系数我们要乘 360,表示有 360° 的角度可以随机到。此时我们再看看效果:

让爱心散开

为了让爱心能更浪漫点,我们需要将这些爱心在以鼠标坐标为中心,向四周散开。

相信大家都知道套路,实际上就是改变每个爱心的偏移,那么就要用到动画了。

 span::before {...animation: moveShape 1s linear infinite;
}
@keyframes moveShape {0% {transform: translate(0) rotate(0deg);}100% {transform: translate(300px) rotate(360deg);}
} 

我们设置在动画开始到动画结束的过程中,偏移量从 0 至 300px,同时旋转 360°。

让我们看看效果:

可以,已经很棒了。但是还不够,我们仔细看动图,可以发现爱心消失的很突然,所以我们接下来要淡化一下这么生硬的消失效果。

消失动画

为了让爱心消失的不那么突然,我们可以使用 opacity 搭配动画,从 1 到 0 的让爱心慢慢消失。

span {...animation: fadeInOut 1s linear infinite;
}
@keyframes fadeInOut {0%,100% {opacity: 0;}20%, 80% {opacity: 1;}
} 

看看我们的最终效果:

最后

最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

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

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

相关文章

Android 开发音频录播中媒体录制器MediaRecorder和媒体播放器MediaPlayer的讲解及实战(超详细 附源码)

需要源码请点赞关注收藏后评论区留下QQ~~~ 一、媒体录制器MediaRecorder MediaRecorder是Android自带的音视频录制工具&#xff0c;它通过操纵摄像头和麦克风完成媒体录制&#xff0c;既可录制视频又可以单独录制音频 下面是它的常用方法 reset 重置录制资源 prepare 准备录制…

C/C++语言 3 —— 输入输出

C语言的io函数&#xff1a; printf 输出 和 scanf输入 是 C语言的标准IO函数的一部分&#xff1a; scanf函数会将屏幕上输入的字符&#xff0c;根据格式的要求转化为对应的数据&#xff1a; scanf 需要提供内存地址代码&#xff1a; #include <iostream> using nam…

【数字电路基础】进制转换:二进制、十进制、八进制、十六进制、反码、补码、原码

文章目录 一、无符号数进制转换1.1、十进制转二、八、十六1.1.1、 十进制转二进制1.1.2、 十进制转八进制1.1.2、 十进制转十六进制1.2、二、八、十六转十进制1.3 二进制转八、十六1.4 八、十六转二进制1.4 八转十六二、有符号数进制转换2.1 正数进制转换2.2 负数进制转换一、无…

Linux安装Tomcat详细教程(图文)

1、下载Linux版本****的Tomcat 下载地址 2、在usr目录下新建tomcat目录&#xff0c;然后将下载的tomcat拷贝到新建的tomcat目录中 创建目录命令&#xff1a;mkdir /usr/tomcat 3、进入到tomcat目录中解压下载的tomcat安装包 解压命令&#xff1a;tar -zxvf apache-tomcat-8…

自动驾驶感知算法实战13——自动驾驶感知未来发展方向分享

自动驾驶感知算法实战专栏:https://blog.csdn.net/charmve/category_12097938.html目录 发展方向:分享:自动驾驶3.0未来需要解决的问题发展方向: 多模态感知 多任务处理 大模型(通用智能) 分享: 自动驾驶3.0 第一,自动驾驶3.0是数据驱动,更是“真实场景下的海量大数据…

底物多肽Phe-Gly-His-Phe(NO2)-Phe-Ala-Phe-OMe、50572-79-7

胃蛋白酶的良好底物&#xff0c;也被组织蛋白酶 D 切割。 A good substrate for pepsin which is also cleaved by cathepsin D.编号: 402332 中文名称: Phe-Gly-His-Phe(NO2)-Phe-Ala-Phe-OMe CAS号: 50572-79-7 单字母: H2N-FGH-F(4NO2)-FAF-OMe 三字母: H2N-Phe-Gly-His-Phe…

企业信息化的供给侧改革

企业信息化建设供给侧改革的新思路 传统的企业信息化建设思路是什么呢&#xff1f;它是从需求侧的规划跟实施入手的&#xff0c;然后解决做哪些和怎么做业务信息化的问题&#xff0c;用不着关注承担这个项目建设的供给体系的质量、效率、结构问题。这就会导致在项目建设过程中…

[附源码]java毕业设计在线视频网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

垃圾分类解决方案-最新全套文件

垃圾分类解决方案-最新全套文件一、建设背景垃圾分类的意义1.为什么要进行垃圾分类2.智慧垃圾分类的重要性二、建设思路三、建设方案四、获取 - 垃圾分类全套最新解决方案合集一、建设背景 垃圾分类的意义 1.为什么要进行垃圾分类 将易腐有机成分为主的厨房垃圾单独分类&…

运动需要的装备有哪些?2022年运动装备推荐

全民开始运动的今天&#xff0c;越来越多的年轻人会选择在一天的忙碌之后通过简单的运动缓解疲劳。而在运动装备的选择上&#xff0c;由于种类和品牌太多&#xff0c;小白很难从中选择到适合自己的运动装备&#xff0c;作为一个资深运动爱好者&#xff0c;对这方面是非常在行的…

「运维有小邓」如何更有效的避免密码攻击

在这表文章中&#xff0c;让我们一起了解密码在网络安全中的重要性&#xff0c;在我们的日常工作中&#xff0c;密码泄露事件是常发生的&#xff0c; 那今天我们就一起了解ManageEngine ADSelfService Plus 是如何强化您的密码并加强您的企业AD域安全性的。 运维有小邓 2022 年…

MCE | 打破 Western Blot 玄学操作

看我一顿操作猛如虎&#xff1a; 电泳 → 转膜 → 封闭 → 孵一抗 → 孵二抗 → 检测&#xff0c;剩下的就是等待。 图 1. Western blot 操作流程简介[1] 我的实验结果中出现了各种稀奇古怪的玩意儿&#xff1f;&#xff1f;&#xff1f; ■ 古怪一&#xff1a;高背景 萌 Cece…

合作|创邻科技携手海颐软件成功中标,Galaxybase图平台赋能广西电网业务升级

近日&#xff0c;烟台海颐软件股份有限公司&#xff08;简称“海颐软件”&#xff09;携手浙江创邻科技有限公司&#xff08;简称“创邻科技”&#xff09;成功中标南方电网广西电网有限责任公司&#xff08;简称“广西电网”&#xff09;课题项目。期待通过结合双方产品优势&a…

【车间调度】遗传算法求解车间调度问题(含甘特图)【含Matlab源码 2216期】

⛄一、车间调度简介 1 车间调度定义 车间调度是指根据产品制造的合理需求分配加工车间顺序&#xff0c;从而达到合理利用产品制造资源、提高企业经济效益的目的。车间调度问题从数学上可以描述为有n个待加工的零件要在m台机器上加工。问题需要满足的条件包括每个零件的各道工序…

如何将带GPS的网络化的软件定义无线电接收机应用于分布式和移动频谱监测?(一)

导言 无线信号无处不在。无线网络为我们的移动设备&#xff0c;物联网&#xff08;IoT&#xff09;&#xff0c;智能城市&#xff0c;自动驾驶汽车等提供动力。从基本视频流到整个公用电网的所有内容现在都依赖于可靠&#xff0c;高速和不间断的连接。这一新现实给频谱监测用户…

文本攻击textattack->openattack

一 文本对抗攻击的定义 很小的扰动&#xff0c;无法映射到原始输出。那么就是对抗样本&#xff0c;生成对抗样本的过程称为对抗攻击。 1.1 类型分类 根据是攻击者否了解模型的具体细节&#xff1a; 白盒攻击【攻击者可以访问模型的完整信息&#xff0c;包括模型结构&#xff0c…

表格软件之FineReport-JS实现大数据集导出(二)

1. 示例&#xff1a;大数据集导出动态参数值 1.1 新建模板 1.1.1 新建数据集 新建普通报表&#xff0c;新建数据集&#xff0c;SQL 语句如下&#xff1a; ds1&#xff1a;SELECT * FROM 销量 where 11 and 地区 in (${area}) and 销售员 in (${stuff}) ds2&#xff1a;SEL…

178. 分数排名

文章目录1.题目2.示例3.答案①系统自带函数1.题目 表: Scores -------------------- | Column Name | Type | -------------------- | id | int | | score | decimal | -------------------- Id是该表的主键。 该表的每一行都包含了一场比赛的分数。Score是一个有两位小数点的…

LigaAI X 猴子无限 | AIGC 火了,专业设计者的福音来了!

「人工智能团队协作」还能有多少种打开方式&#xff1f; 致力于打造新一代智能研发协作平台&#xff0c;LigaAI在不断强化自身智能化能力的同时&#xff0c;也持续关注着整个「AI协作」领域的发展。 Gartner在《 2022 年重要战略技术趋势报告》中指出&#xff0c;未来三到五年…

MySQL基础命令高级操作

文章目录一、案例拓展二、数据库高级操作1、克隆表2、清空表&#xff0c;删除表内的所有数据3、创建临时表三、创建外键约束&#xff0c;保证数据的完整性和一直性1、创建主从表2、为主表zhu添加一一个主键约束。主键名建议以“PK_ "开头3、为从表cong表添加外键&#xff…