Web实现在鼠标或点击处的文字特效
admin
2024-02-12 04:57:21
0

I’m Shendi


文章目录

  • 效果展示
  • 实现思路
  • 效果实现
    • 元素样式
    • 点击事件
      • 获取位置
      • 创建元素
      • 将元素加入document
    • 元素移动消失效果
    • 最终代码


效果展示

进入以下链接直接体验
https://sdpro.top/html/main.html


视频展示

js在鼠标点击后弹出文字特效演示



实现思路

给document增加点击事件,点击时在点击位置生成文字并使用js延时来制作动画效果


效果实现

首先生成的为文本,所以需要准备一个文本标签(当然也可以用图片标签等…)


元素样式

生成的文本在鼠标点击处,所以一般position为absolute或者fixed,absolute会影响页面,这里使用fixed

元素在其他元素上面,z-index需要给一个较大值
文本不需要换行,也不需要选中,于是css如下(也可以用js设置)

.effect_ele {position: fixed;z-index: 9999;font-size: 14px;white-space: nowrap;/* 让元素不能被选中 */-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;
}


点击事件

所有元素都能触发这个特效,所以直接给document增加点击事件

document.documentElement.addEventListener('click', function (event) {
});


获取位置

在点击事件中的 event 参数包含了点击位置信息,因为使用的 fixed,所以使用 clientX,clientY拿到位置,默认生成的位置应该在点击位置的上面一点,所以 y 默认减去一定的像素

var x = event.clientX, y = event.clientY - 10;

创建元素

特效效果为点击出现文字后文字慢慢消失并往左上/右上移动
而且元素的文字颜色/文字随机变化,于是先创建随机

// 文字列表
var texts = "Test,Shendi,Element,Javascript".split(",");
// 随机文字
var text = texts[Math.floor(Math.random()*100) % texts.length];
// 随机颜色 rgb
var r = Math.floor(Math.random()*255),g = Math.floor(Math.random()*255),b = Math.floor(Math.random()*255);

元素创建使用 document.createElement("标签名");,这里就用span标签就可以了
var ele = document.createElement("span");

文字消失需要使用到透明度(opacity),需要在js里给元素设置透明度为1 (0代表完全透明)

// 只能在js设置,在css里设置后面拿到为 undefined
ele.style.opacity = 1;

将元素初始化,为了美观一点,可以加上文字阴影

// 元素的 class 名称,指定元素样式
ele.className = "effect_ele";
// 元素默认位置
ele.style.left = x + "px";
ele.style.top = y + "px";
// 文字颜色,文字阴影
ele.style.color = "rgb(" +r+ "," +g+ "," +b+ ")";
ele.style.textShadow = "5px 3px 1px rgba(" +r+ "," +g+ "," +b+ ",0.4)";
//  元素内容
ele.innerText = text;

将元素加入document

创建完元素后需要将元素加入文档才能显示,使用 appendChild 函数,函数返回添加后的元素引用

在点击事件中直接使用 this.appendChild

// 这里的元素实例需要保存,后面需要改变元素位置等
var eleInst = this.appendChild(ele);


元素移动消失效果

往上移动,左右则随机,每次移动都减少一点透明度,透明度减完则删除元素,因需要递归,所以封装了一个函数,代码如下

// 参数1为创建的元素引用,参数4为方向
function textAnim(ele, x, y, direction) {// 往上移动,并减少opacity,直至opacity<=0则移除setTimeout(function () {if (ele.style.opacity <= 0) {document.documentElement.removeChild(ele);return;}y -= 1.2;if (direction == 0) {x += 1;} else {x -= 1;}ele.style.top = y + "px";ele.style.left = x + "px";ele.style.opacity = ele.style.opacity - 0.02;textAnim(ele, x, y, direction);}, 11);
}

最终代码

最终代码如下

/*** 实际使用为了避免意外,用 try catch 盖住* @author Shendi*/
try {var texts = "Test,Shendi,Element,Javascript".split(",");document.documentElement.addEventListener('click', function (event) {var x = event.clientX, y = event.clientY - 10;var ele = document.createElement("span");ele.className = "effect_ele";ele.style.left = x + "px";ele.style.top = y + "px";// 只能在这设置,在css里就拿不到了ele.style.opacity = 1;var r = Math.floor(Math.random()*255),g = Math.floor(Math.random()*255),b = Math.floor(Math.random()*255);ele.style.color = "rgb(" +r+ "," +g+ "," +b+ ")";ele.style.textShadow = "5px 3px 1px rgba(" +r+ "," +g+ "," +b+ ",0.4)";ele.innerText = texts[Math.floor(Math.random()*100) % texts.length];textAnim(this.appendChild(ele), x, y, Math.floor(Math.random()*10)%2);});/* direction 1左 0右 */function textAnim(ele, x, y, direction) {// 往上移动,并减少opacity,直至opacity<=0则移除setTimeout(function () {if (ele.style.opacity <= 0) {document.documentElement.removeChild(ele);return;}y -= 1.2;if (direction == 0) {x += 1;} else {x -= 1;}ele.style.top = y + "px";ele.style.left = x + "px";ele.style.opacity = ele.style.opacity - 0.02;textAnim(ele, x, y, direction);}, 11);}
} catch (e) {console.log(e);
}


一键三连嘛?

上一篇:Vim基础使用

下一篇:pandas drop 方法

相关内容

热门资讯

安卓系统home键隐藏,提升手... 你有没有发现,手机里的安卓系统越来越智能了?有时候,一些小小的改动就能带来大大的惊喜。今天,就让我来...
手机怎么刷屏安卓版系统,安卓手... 你有没有发现,现在手机刷屏简直成了朋友圈的标配?不管是美食、旅行还是日常琐事,大家都喜欢用手机刷屏来...
小米安卓系统电视机,畅享视听盛... 亲爱的读者们,你是否曾想过,家里的电视也能像智能手机一样智能呢?今天,就让我带你一起探索一下小米安卓...
安卓系统怎么设置最好的,nn`... 你有没有发现,安卓系统就像一个万能的魔法盒,里面藏着无数的小秘密和神奇的功能?想要让你的安卓手机发挥...
安卓哪个品牌系统顺畅,哪个品牌... 手机系统,这个话题可是让不少安卓用户头疼不已。市面上那么多品牌,哪个的系统用起来最顺畅呢?今天,就让...
安卓系统相机不能启动,安卓相机... 手机里的安卓系统相机突然不能启动了,这可真是让人头疼啊!你有没有遇到过这种情况呢?别急,今天就来跟你...
安卓原生系统时间校准,基于安卓... 手机时间不准了?别急,我来教你如何轻松搞定安卓原生系统时间校准! 话题引入:手机时间不准,是不是让你...
主机系统内存和安卓联机,主机系... 你有没有想过,为什么你的手机在玩大型游戏时总是卡得要命?又或者,为什么你的电脑在处理复杂任务时,反应...
安卓如何手机上刷系统,轻松升级... 你有没有想过,你的安卓手机是不是已经有点儿“老态龙钟”了呢?别急,别急,今天就来教你怎么给它来个“青...
苹果系统观战安卓好友,观战新体... 亲爱的读者,你是否也有过这样的经历:一边享受着苹果系统的优雅与流畅,一边又忍不住好奇地观战安卓好友们...
安卓系统最好是哪个,最佳生成方... 你有没有想过,手机里的安卓系统哪个才是最适合你的呢?在这个信息爆炸的时代,手机已经成为了我们生活中不...
改时间安卓系统vivo,探索v... 你有没有发现,最近你的vivo手机有点儿“慢吞吞”的?别急,别急,让我来给你支个招儿,让你的安卓系统...
安卓系统的旋钮在哪,旋钮生成位... 你有没有发现,有时候手机上的小细节也能让人头疼不已?比如说,安卓系统的旋钮在哪?这问题看似简单,但不...
安卓手机app系统软件,探索安... 你有没有发现,现在手机里的app简直就像是个小宇宙,各种功能应有尽有,让人眼花缭乱。尤其是安卓手机,...
win111安卓子系统,开启跨... 哇,你有没有听说最近的大新闻?那就是Windows 11的安卓子系统!是的,你没听错,Windows...
游戏摇杆连安卓系统电视,畅享游... 你有没有想过,家里的安卓系统电视也能玩起游戏来?没错,就是那种让你手舞足蹈、热血沸腾的游戏摇杆!今天...
nokia平板系统兼容安卓,尽... 你有没有想过,那些曾经陪伴我们度过无数时光的诺基亚手机,现在竟然也能摇身一变,成为平板电脑的得力助手...
安卓原生系统是什么品牌,探索安... 你有没有想过,为什么你的手机那么流畅,界面那么美观?这背后,可是有一个强大的“大脑”在默默支撑着呢!...
安卓3大操作系统,从三大分支看... 你知道吗?在安卓的世界里,操作系统可是有着三大巨头呢!它们就像安卓世界的三驾马车,各自有着独特的魅力...
开源文件管理系统安卓,打造个性... 你有没有想过,手机里那些乱糟糟的文件,要是能有个好帮手,生活该有多轻松啊?今天,就让我带你走进一个神...