国庆发生的那些事儿------编写了炫酷的HTML动态鼠标特效,超级炫酷酷酷!

文章目录

  • 前言
  • 具体操作
  • 总结


前言

国庆假期的欢乐,当然少不了编码爱好者!假期编写了炫酷的HTML动态鼠标特效,超级炫酷酷酷!让你的页面变得更加炫酷,让你的小伙伴们羡慕的大神编码!快来看看大神是如何编写的吧!


具体操作

HTML动态鼠标特效

效果图

在这里插入图片描述

在这里插入图片描述

动态鼠标效果.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
</body>
<!--opacity设置线条粗细-->
<script type="text/javascript" src="mouse.js" opacity= 0.8></script>
</html>

在这里插入图片描述

mouse.js

//立即执行函数
//!的作用是告诉javascript引擎这是一个函数表达式,不是函数声明,()、!、+、-等运算符都能实现这个作用,不过()是最安全的
//在!function(){}后面加上()会立即调用这个函数
//这样做可以模仿一个私有作用域,这样html文件引用多个js文件时便不会造成变量冲突
! function () {//canvas元素相关//创建canvas元素,并设置canvas元素的idvar canvas = document.createElement("canvas"),context = canvas.getContext("2d"),attr = getAttr();//设置创建的canvas的相关属性canvas.id = "c_n" + attr.length;canvas.style.cssText = "position:fixed;top:0;left:0;z-index:" + attr.z + ";opacity:" + attr.opacity;//将canvas元素添加到body元素中document.getElementsByTagName("body")[0].appendChild(canvas);//该函数设置了canvas元素的width属性和height属性getWindowWH();//onresize 事件会在窗口或框架被调整大小时发生//此处即为当窗口大小改变时,重新获取窗口的宽高和设置canvas元素的宽高window.onresize = getWindowWH;//该函数会得到引用了本文件的script元素,//因为本文件中在赋值时执行了一次getScript函数,html文件引用本文件时,本文件之后的script标签还没有被浏览器解释,//所以得到的script数组中,引用了本文的script元素在该数组的末尾//该函数的用意为使开发者能直接修改在html中引入该文件的script元素的属性来修改画布的一些属性,画布的z-index,透明度和小方块数量,颜色//与前面往body元素添加canvas元素的代码配合,当开发者想要使用该特效作为背景时,只需在html文件中添加script元素并引用本文件即可function getAttr() {let scripts = document.getElementsByTagName("script"),len = scripts.length,script = scripts[len - 1];//v为最后一个script元素,即引用了本文件的script元素return {length: len,z: script.getAttribute("zIndex") || -1,opacity: script.getAttribute("opacity") || 1,color: script.getAttribute("color") || "255, 0, 0",/*现在是红色效果,设置显示的颜色*/count: script.getAttribute("count") || 109}}//获得窗口宽高,并设置canvas元素宽高function getWindowWH() {W = canvas.width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,H = canvas.height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight}//生成随机位置的小方块var random = Math.random,squares = [];//存放小方块//往squares[]数组放小方块for(let p = 0; p < attr.count; p ++){var square_x = random() * W,//横坐标square_y = random() * H,//纵坐标square_xa = 2 * random() - 1,//x轴位移 -1,1square_ya = 2 * random() - 1;//y轴位移squares.push({x: square_x,y: square_y,xa: square_xa,ya: square_ya,max: 6000})}//生成鼠标小方块var mouse = {x: null,y: null,max: 20000};//获取鼠标所在坐标window.onmousemove = function (i) {//i为W3C DOM,window.event 为 IE DOM,以实现兼容IE//不过目前似乎IE已经支持W3C DOM,我用的是IE11,我注释掉下一句代码也能实现鼠标交互效果,//网上说7/8/9是不支持的,本人没有试验,//当然加上是没有错的i = i || window.event;mouse.x = i.clientX;mouse.y = i.clientY;}//鼠标移出窗口后,消除鼠标小方块window.onmouseout = function () {mouse.x = null;mouse.y = null;}//绘制小方块,小方块移动(碰到边界反向移动),小方块受鼠标束缚var animation = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (i) {window.setTimeout(i, 1000 / 45)};//各个浏览器支持的requestAnimationFrame有所不同,兼容各个浏览器function draw() {//清除画布context.clearRect(0, 0, W, H);var w = [mouse].concat(squares);//连接(合并)鼠标小方块数组和其他小方块数组var x, v, A, B, z, y;//square属性表:x,y,xa,ya,maxsquares.forEach(function (i) {
//实现小方块定向移动i.x += i.xa;i.y += i.ya;// 控制小方块移动方向// 当小方块达到窗口边界时,反向移动i.xa = i.xa * (i.x > W || i.x < 0 ? -1 : 1);i.ya = i.ya * (i.y > H || i.y < 0 ? -1 : 1);//fillRect前两个参数为矩形左上角的x,y坐标,后两个分别为宽度和高度//绘制小方块context.fillRect(i.x - 0.5, i.y - 0.5, 1, 1);//遍历w中所有元素for (let n = 0; n < w.length; n++) {x = w[n];//如果x与i不是同一个对象实例且x的xy坐标存在if (i !== x && null !== x.x && null !== x.y) {x_diff = i.x - x.x;//i和x的x坐标差y_diff = i.y - x.y;//i和x的y坐标差distance = x_diff * x_diff + y_diff * y_diff;//斜边平方if(distance < x.max){//使i小方块受鼠标小方块束缚,即如果i小方块与鼠标小方块距离过大,i小方块会被鼠标小方块束缚,//造成 多个小方块以鼠标为圆心,mouse.max/2为半径绕成一圈if(x === mouse && distance > x.max/2){i.x = i.x - 0.03 * x_diff;i.y = i.y - 0.03 * y_diff;}A = (x.max - distance) / x.max;context.beginPath();//设置画笔的画线的粗细与两个小方块的距离相关,范围0-0.5,两个小方块距离越远画线越细,达到max时画线消失context.lineWidth = A * 2;//设置画笔的画线颜色为s.c即画布颜色,透明度为(A+0.2)即两个小方块距离越远画线越淡context.strokeStyle = "rgba(" + attr.color + "," + (A + 0.2) + ")";//设置画笔的笔触为i小方块context.moveTo(i.x, i.y);//使画笔的笔触移动到x小方块context.lineTo(x.x, x.y);//完成画线的绘制,即绘制连接小方块的线context.stroke();}}}//把i小方块从w数组中去掉
//防止两个小方块重复连线w.splice(w.indexOf(i), 1);});//window.requestAnimationFrame与setTimeout相似,形成递归调用,//不过window.requestAnimationFrame采用系统时间间隔,保持最佳绘制效率,提供了更好地优化,使动画更流畅//经过浏览器优化,动画更流畅;//窗口没激活时,动画将停止,省计算资源;animation(draw);}//此处是等待0.1秒后,执行一次draw(),真正的动画效果是用window.requestAnimationFrame实现的setTimeout(function () {draw();}, 100)
}();

效果图

在这里插入图片描述


总结

炫酷的HTML动态鼠标特效,超级炫酷酷酷!让你的页面变得更加炫酷,让你的小伙伴们羡慕的大神编码!快来看看大神是如何编写的吧!记得点赞收藏转发哦!


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

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

相关文章

英伟达NVIDIA驱动安装

一般&#xff0c;我们新的显卡上机或者新系统可能就需要重新安装显卡驱动。或者是我们在配置深度学习环境时候&#xff0c;需要手动安装驱动。 官网地址&#xff1a;官方高级驱动搜索 | NVIDIA 我们选择好自己需要的驱动后直接安装即可 下载的时候&#xff0c;选择自己需要的驱…

基于SpringBoot的网上超市系统

基于SpringBoot的网上超市系统的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色&#xff1a;用户、管理员 管理员&#xff1a;个人中心、用户管理、商品分类…

BIRCH算法全解析:从原理到实战

目录 一、引言什么是BIRCH算法BIRCH算法的应用场景文章目标和结构概述 二、BIRCH算法基础CF&#xff08;Clustering Feature&#xff09;树的概念数据点簇簇的合并和分裂 BIRCH的时间复杂度和空间复杂度BIRCH vs K-means和其他聚类算法 三、BIRCH算法的技术细节CF树的构建节点和…

计算机毕设 大数据工作岗位数据分析与可视化 - python flask

文章目录 0 前言1 课题背景2 实现效果3 项目实现3.1 概括 3.2 Flask实现3.3 HTML页面交互及Jinja2 4 **完整代码**5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要…

word 多级目录的问题

一、多级标题自动编号 --> 制表符 -> 空格 网址&#xff1a; 【Word技巧】2 标题自动编号——将多级列表链接到样式 - YouTube 二、多级列表 --> 正规形式编号 网址&#xff1a;Word 教学 - 定框架&#xff1a;文档格式与多级标题&#xff01; - YouTube 三、目…

osg实现鼠标框选

目录 1. 需求的提出 2. 具体实现 2.1. 禁止场景跟随鼠标转动 2.2. 矩形框前置绘制 3. 附加说明 3.1. 颜色设置说明 3.2.矩形框显示和隐藏的另一种实现 1. 需求的提出 有时需要在屏幕通过按住键盘上的某个键如Ctrl键且按住鼠标左键&#xff0c;拖出一个矩形&#xff0c;实现框…

[Machine learning][Part3] numpy 矢量矩阵操作的基础知识

很久不接触数学了&#xff0c;machine learning需要用到一些数学知识&#xff0c;这里在重温一下相关的数学基础知识 矢量 矢量是有序的数字数组。在表示法中&#xff0c;矢量用小写粗体字母表示。矢量的元素都是相同的类型。例如&#xff0c;矢量不包含字符和数字。数组中元…

vertx的学习总结7

这里我就简单的聊几句&#xff0c;如何用vertx web来搞一个web项目的 1、首先先引入几个依赖&#xff0c;这里我就用maven了&#xff0c;这个是kotlinvertx web <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apac…

Modelsim测试覆盖率操作说明

1、打开Project窗口界面 2、在project界面下&#xff0c;选中所有需要测试覆盖率的.v文件&#xff08;不包括tb文件&#xff09;&#xff0c;鼠标点击右键&#xff0c;在Properties选项中选择Coverage选项&#xff0c;选择需要测试的覆盖率类型 3、重新编译所有的源文件&#x…

(三) Markdown插入互联网或本地视频解决方案

前言 不论博客系统是WordPress还是Typecho&#xff0c;绕不开的是两种书写语言&#xff0c;一种称之为富文本&#xff0c;一种叫做Markdown。 Markdown有很多好处&#xff0c;也有很多坏处&#xff0c;比如Markdown本身不具备段落居中的功能&#xff0c;以及Markdown也不具有…

Java架构师职责和技能

目录 1 架构师简介2 架构师职责2.1 架构师是技术领导架构设计做决策2.2 架构师可以是团队或者组织2.3 架构师必须掌握足够的技术知识2.4 架构师必须掌握足够的架构设计技能2.5 架构师必须具备很好的编程能力2.6 架构师必须深入理解业务及其业务的领域知识2.7架构师应该具备很好…

基于Java的驾校收支管理可视化平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

二层VLAN配置实验

四台PC的IP地址如图所示&#xff0c;子网掩码均为255.255.255.0&#xff0c;四台PC处在同一个局域网之中&#xff0c;在配置VLAN之前能够彼此ping通。配置的目的是将PC1和PC3划分到VLAN10中&#xff0c;PC2和PC4划分到VLAN20中。 在配置之前需要进入系统视角。 创建VLAN 在两…

设计加速!11个Adobe XD插件推荐!

你是否一直在寻找可以提升 Adobe XD 工作流程和体验的方法&#xff1f;如果是&#xff0c;一定要试试这些 Adobe XD 插件&#xff01;本文将介绍 11 款好用的 Adobe XD 插件&#xff0c;这些插件可以为 UI/UX 设计添加很酷的新功能&#xff0c;极大提升你的工作效率和产出。让我…

SQL与关系数据库基本操作

SQL与关系数据库基本操作 文章目录 第一节 SQL概述一、SQL的发展二、SQL的特点三、SQL的组成 第二节 MySQL预备知识一、MySQL使用基础二、MySQL中的SQL1、常量&#xff08;1&#xff09;字符串常量&#xff08;2&#xff09;数值常量&#xff08;3&#xff09;十六进制常量&…

论文学习:RT-DETR

RT-DETR 摘要 DETR取得显著性能&#xff0c;但高成本计算使其无法发挥无NMS的优势&#xff0c;无法实际应用。本文分析了NMS对准确性和速度的负面影响&#xff0c;并建立端到端的速度基准。第一个实时端到端检测器&#xff0c;高效处理多尺度特征&#xff0c;并提出IoU-aware…

osgPBR(十五)镜面IBL--查看不同级别的HDR环境贴图

首先&#xff0c;设置可以使用Mipmap&#xff0c;启用三线性过滤&#xff0c;设置最大级别和最小级别 osg::ref_ptr<osg::TextureCubeMap> tcm new osg::TextureCubeMap; tcm->setTextureSize(128, 128);tcm->setFilter(osg::Texture::MIN_FILTER, osg::Texture:…

《幸福之路》罗素(读书笔记)

目录 作者简介 作者的感悟 经典摘录 一、不幸福的成因 1、一部分要归咎于社会制度 2、一部分则得归咎于个人心理——当然&#xff0c;你可以说个人心理是社会制度的产物。 二、欠缺某些想要的东西&#xff0c;是快乐的必要条件 三、无聊与刺激 四、现代人的精神疲劳 五…

【C++】vector相关OJ

文章目录 1. 只出现一次的数字2. 杨辉三角3. 电话号码字母组合 ヾ(๑╹◡╹)&#xff89;" 人总要为过去的懒惰而付出代价ヾ(๑╹◡╹)&#xff89;" 1. 只出现一次的数字 力扣链接 代码展示&#xff1a; class Solution { public:int singleNumber(vector<i…

【“栈、队列”的应用】408数据结构代码

王道数据结构强化课——【“栈、队列”的应用】代码&#xff0c;持续更新 链式存储栈&#xff08;单链表实现&#xff09;&#xff0c;并基于上述定义&#xff0c;栈顶在链头&#xff0c;实现“出栈、入栈、判空、判满”四个基本操作 #include <stdio.h> #include <…