使用原生JS,实现鼠标点击爱心效果 !!!

引言:

在很多时候我们都需要实现鼠标点击出现图案或者文字这样的效果,对于用户而言,这样的体验是很极致的。其实实现起来也很简单,下面一起来学习一下吧。文末附上完整代码,可以复制关键部分直接使用到自己的页面上

实现效果

这样的效果很常用,在很多网页博客中都有使用

实现思路

  1. 首先我们需要获取到当前鼠标点击的位置
  2. 需要在当前位置生成一个标签
  3. 需要给标签添加随机的自定义内容
  4. 随机的文本颜色
  5. 添加文本的淡出效果
  6. 清除淡出的标签

实现过程

下面的代码为了分开解释进行了拆分,完整代码在文末

1. 生成随机文本

let content = ["去活出你自己。", "《日不落》", "《一格格》", "《森林巴士》", "《爱就一个字》",
"《星辰大海》", "《千千万万》", "《我在等》", "《如一》", "《收敛》", "《间距》", "《早点早点》",
"《阿拉斯加海湾》", "《Peace&Love》", "《灰色》", "《带你回家》", "《等我回家》", "《0919》",
"《我很好》", "《会不会》", "《经济舱》", "《我走后》", "《不删》", "《Girls》",
"《Let Her Go》", "《关于你的梦》", "《慢慢》", "《下雨天》", "《翅膀》", "《靠近一点》",
"《翅膀》", "《This Is Love》", "《重来》", "《晴天》", "《空白格》", "《爱你3000》",
"《下落不明》", "《我要》", "《晚星》", "《你,好不好?》", "《50 Feet》", "《COCO》",
"《NUMB》", "《重演》", "《所念皆星河》"
] //自定义内容的数组
let randContent = Math.ceil(Math.random() * content.length);

首先需要自己定义一个数组,存放的内容就是鼠标点击时出现的内容,我这里用的是我自己喜欢的音乐(一个个打的,真的辛苦),然后通过随机获取一个数组索引,来实现随机文本。

2. 随机生成一个颜色

Text.prototype.getRandom = function() {
let allType = '0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f'; //16进制颜色
let allTypeArr = allType.split(','); //通过','分割为数组
let color = '#';
for (var i = 0; i < 6; i++) {
//随机生成一个0-16的数
var random = parseInt(Math.random() * allTypeArr.length);
color += allTypeArr[random];
}
return color; //返回随机生成的颜色
}

这个在前面写过的博客中也有用到,这次是直接复制过来的,通过随机获取0-16中的值,来实现一个16进制的颜色,这里我们要知道像#000fff这样表示的颜色,其实是6个16进制数组成的!

3. 文本上升效果

let i = 0
setInterval(() => {
_this.style.top = this.y - 20 - i + 'px'
i++
}, 10);

由于原生js中直接操作动画帧的样式比较复杂,所以采用定时器实现相同的功能,将标签的top值逐渐减小,这样标签就会实现上升的效果

4. 文字逐渐变淡效果

@keyframes remove {
100% {
opacity: 0;
}
}

逐渐变淡的效果是通过css3动画来实现的很简单,动画是通过js来给元素绑定的

5. 清除标签

Text.prototype.out = function (_this) {
_this.remove()
}
setTimeout(function () {
text.out(span)
}, 1900)

由于动画时长是两秒钟,这里采用倒计时,在1.9秒左右将标签删除~

6. 鼠标点击实例化标签,并在点击位置生成

body.addEventListener('click', function (e) {
let x = e.pageX;
let y = e.pageY; //当前坐标
let randContent = Math.ceil(Math.random() * content.length);//获取随机数
let text = new Text(x, y, randContent);//实例化
let span = document.createElement('span')//新建标签
span.style.color = text.getRandom();//添加随机颜色
text.create(span);//添加文本内容
setTimeout(function () {
text.out(span)//清除标签
}, 1900)
})

这里通过实例化的方式来给文本标签添加样式和方法,将文本标签显示在页面上

完整代码

一下就是完整代码,可以更改数组中的内容来实现自己的效果

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>点击出现自定义文字</title>
<style>
body {
height: 100vh;
background-color: black;
} .text {
position: absolute;
z-index: 9999999;
font-weight: bold;
user-select: none;
} @keyframes remove {
100% {
opacity: 0;
}
}
</style>
</head> <body> </body>
<script>
window.addEventListener('load', function () {
let body = document.body;
let content = ["去活出你自己。", "《日不落》", "《一格格》", "《森林巴士》", "《爱就一个字》",
"《星辰大海》", "《千千万万》", "《我在等》", "《如一》", "《收敛》", "《间距》", "《早点早点》",
"《阿拉斯加海湾》", "《Peace&Love》", "《灰色》", "《带你回家》", "《等我回家》", "《0919》",
"《我很好》", "《会不会》", "《经济舱》", "《我走后》", "《不删》", "《Girls》",
"《Let Her Go》", "《关于你的梦》", "《慢慢》", "《下雨天》", "《翅膀》", "《靠近一点》",
"《翅膀》", "《This Is Love》", "《重来》", "《晴天》", "《空白格》", "《爱你3000》",
"《下落不明》", "《我要》", "《晚星》", "《你,好不好?》", "《50 Feet》", "《COCO》",
"《NUMB》", "《重演》", "《所念皆星河》"
] //自定义内容的数组
body.addEventListener('click', function (e) {
let x = e.pageX;
let y = e.pageY; //当前坐标
let randContent = Math.ceil(Math.random() * content.length);
let text = new Text(x, y, randContent);
let span = document.createElement('span')
span.style.color = text.getRandom();
text.create(span);
setTimeout(function () {
text.out(span)
}, 1900)
}) function Text(x, y, rand) {
this.x = x;
this.y = y;
this.rand = rand;
}
Text.prototype.create = function (_this) {
let body = document.body;
_this.innerHTML = content[this.rand - 1];
_this.className = 'text'
_this.style.top = this.y - 20 + 'px'
_this.style.left = this.x - 50 + 'px'
_this.style.animation = 'remove 2s'
body.appendChild(_this);
let i = 0
setInterval(() => {
_this.style.top = this.y - 20 - i + 'px'
i++
}, 10);
}
Text.prototype.out = function (_this) {
_this.remove()
}
//设置随机颜色
Text.prototype.getRandom = function () {
let allType = '0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f'; //16进制颜色
let allTypeArr = allType.split(','); //通过','分割为数组
let color = '#';
for (var i = 0; i < 6; i++) {
//随机生成一个0-16的数
var random = parseInt(Math.random() * allTypeArr.length);
color += allTypeArr[random];
}
return color; //返回随机生成的颜色
}
})
</script>
</html>

今天的分享就结束辽~,快打开你的编译器实现吧!!!

使用原生JS,实现鼠标点击爱心效果 !!!的更多相关文章

  1. JS实现鼠标点击爱心&绘制多边形&每日一言功能

    本篇文章主要介绍我的个人博客 程序猿刘川枫 中页面使用的美化功能(基于JS实现): 1.鼠标点击出现不同颜色爱心特效 2.页面浮动多边形跟随鼠标移动 3.每日一言功能 1.鼠标点击出现爱心特效 经常在 ...

  2. 用js实现鼠标点击爱心特效

    效果如图以下是代码 <script> !function(e, t, a) { function r() { for (var e = 0; e < s.length; e++) s ...

  3. 原生js获取鼠标坐标方法全面讲解-zmq

    原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y 一.关于js鼠标事件综合各大浏览器能获取到坐标的属性总共以下五种:eve ...

  4. jq商品展示图放大镜 and 原生js和html5写的放大镜效果 ~~效果不错

    <!DOCTYPE HTML><html lang="en-US"><head> <meta charset="UTF-8&qu ...

  5. 原生JS、CSS实现的转盘效果(目前仅支持webkit)

    这是一个原生JS.CSS实现的转盘效果(题目在这:http://www.cnblogs.com/arfeizhang/p/turntable.html),花了半个小时左右,准备睡觉,所以先贴一段代码, ...

  6. 基于jQuery CSS3鼠标点击动画效果

    分享基于jQuery CSS3鼠标点击动画效果支持图片或内容滑动,允许设置动画延迟效果.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="co ...

  7. 原生JS实现轮播图的效果

    原生JS实现轮播图的效果: 只要缕清了全局变量index的作用,这个轮播图也就比较容易实现了:另外,为了实现轮这个效果,有几处clearInterval()必须写上.废话不多说,直接上代码,修复了几个 ...

  8. 基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转

    基于css3新属性transform,实现3d立方体的旋转 通过原生JS,点击事件,鼠标按下.鼠标抬起和鼠标移动事件,实现3d立方体的拖动旋转,并将旋转角度实时的反应至界面上显示 实现原理:通过获取鼠 ...

  9. 61.H5---利用canvas+原生js进行鼠标跟随绘图

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

随机推荐

  1. fiddler 手机抓包(含https) 完整流程

    第一部分:下载并安装fiddler 一.使用任一浏览器搜索[fiddler下载安装],并下载fiddler 安装包. 二.fiddler安装包下载成功后,将下载的fiddler压缩包解压到自定义文件夹 ...

  2. matlab文件管理

    当前文价夹浏览器以及路径管理器   在主页面左侧有单独的窗口进行显示,可以显示当前目录下的文件并提供文件搜索功能. 搜索路径 搜索先后步骤 输入字符串"polyfit" (1)检查 ...

  3. Day05_18_类和对象的含义与关系

    Java 类和对象 类的含义? 类属于引用数据类型,java语言中所有的.class都属于引用数据类型, 在类体当中,方法体之外定义的变量被称为 成员变量,成员变量若没有赋值,系统会默认赋值为0: 先 ...

  4. 15个问题告诉你如何使用Java泛型

    摘要:Java泛型其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java ...

  5. 【MySQL】Mysql(InnoDB引擎) 索引的数据结构为什么选择B+Tree

    1.B+ Tree的层数较少 B类树的一个很鲜明的特点就是数的层数比较少,而每层的节点非常多,树的每个叶子节点到根节点的距离都是相同的: 2.   减少磁盘IO: 树的每一个节点都是一个数据也,这样每 ...

  6. 通过中转DLL函数实现DLL劫持

    当我们运行程序时,一般情况下会默认加载Ntdll.dll和Kernel32.dll这两个链接库,在进程未被创建之前Ntdll.dll库就被默认加载了,三环下任何对其劫持都是无效的,除了该Dll外,其他 ...

  7. hdu4941 map交换行列

    题意:      有一个大矩阵,某些格子上有数字,然后有三种操作, 1 交换行 2 交换列 3 询问当前坐标数值 思路:      直接用map去映射行列,用二维的map去存数字就行了,水题,想不通的 ...

  8. Windows认证体系解读

    目录 Windows认证方式 Windows本地认证 NTLM认证方式(工作组环境中) wiresharek抓包NTLMv2,使用Hashcat爆破 NTLM认证方式(域环境中) Kerberos认证 ...

  9. Windows PE 第四章 导入表

    第四章 导入表 导入表是PE数据组织中的一个很重要的组成部分,它是为实现代码重用而设置的.通过分析导入表数据,可以获得诸如OE文件的指令中调用了多少外来函数,以及这些外来函数都存在于哪些动态链接库里等 ...

  10. Portswigger web security academy:OS command injection

    Portswigger web security academy:OS command injection 目录 Portswigger web security academy:OS command ...