【js自定义鼠标样式】【js自定义鼠标动画】

文章目录


前言

自定义鼠标形状,自定义鼠标的动画,可以让我们的页面更加有设计感。

当前需求:吧鼠标自定义成一个正方形,鼠标的效果有:和页面的颜色做色差处理,例如当鼠标指到的颜色是白色,在鼠标的这块区域中显示的是黑色,另外,当鼠标指向特定区域时,正方形的鼠标放大三倍,并且以中心为圆点旋转。


一、效果图

鼠标放大之后的效果

鼠标没放大的效果

鼠标的色差

二、实现步骤

1. 去除原有鼠标样式

css 复制代码
body {
  cursor: none;
}

2. 自定义鼠标样式

代码如下(示例):

html 复制代码
<div id="mouse" class="mouse"></div>
css 复制代码
/* pointer-events: 取消它的鼠标事件,并指向它下面的元素。 */
/* mix-blend-mode: 设置图片元素与父容器背景(黄色)进行混合 */
.mouse {
  width: 30px;
  height: 30px;
  will-change: top, left; 
  position: fixed;
  left: -200px;
  z-index: 10020;
  pointer-events: none;
  mix-blend-mode: difference;
  background-color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
}
/* 这是鼠标中的文字,可以不写 */
.mouse-text::after {
  content: "VIEW";
}

js如下

javascript 复制代码
// 引用gsap做动画
import gsap from 'gsap';

// 自定义鼠标样式
function setMouse() {
  const mouse = document.querySelector('.mouse');
  window.addEventListener('mousemove', function(event){    
    mouse.style.left = event.clientX - mouse.offsetWidth/2 + 'px';
    mouse.style.top = event.clientY - mouse.offsetHeight/2 + 'px';       
  })
  gsap.to("#mouse", {
    rotation: -30,
  });
}

// 鼠标动画(放大,旋转)
var mouseTl;

function setMouseChange1() {
  mouseTl = gsap.timeline();
  mouseTl.to("#mouse", {
    duration: .2,
    width: "150px",
    height: "150px"
  });
  mouseTl.fromTo("#mouse", {
    rotation: -30,
  },
  {
    duration: 7,
    repeat: -1,
    rotation: 330,
    ease: "none",
  });
  const mouseDiv = document.getElementById("mouse");
  mouseDiv.setAttribute("class", "mouse mouse-text");
}

// (缩小,旋转到原位)
function setMouseChange2() {
  mouseTl.pause(0);
  const mouseDiv = document.getElementById("mouse");
  mouseDiv.setAttribute("class", "mouse");
}

3. 使用

代码如下(示例):

html 复制代码
<div @mouseenter="bannerTextEnter" @mouseleave="bannerTextLeave">ANIMATION!</div>
javascript 复制代码
// 鼠标移动到banner文字事件
function bannerTextEnter() {
  setMouseChange1();
}
function bannerTextLeave() {
  setMouseChange2()
}

总结

以上就是自定义鼠标样式,自定义鼠标动画的全部了,如有疑问,请评论区留言。

相关推荐
平头哥技术团队5 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
yume_sibai6 小时前
Element Plus 数据展示组件完全指南(15个核心组件)
前端·javascript·vue.js
剑之所向8 小时前
.NET 官方`System.Threading.Channels`
前端·javascript·数据库
渡我白衣9 小时前
并查集:基础认识与模拟实现
android·java·javascript·数据结构·c++·算法·并查集
八角丶10 小时前
Node 网络编程 —— TLS 模块
javascript·后端·node.js
倔强的石头10610 小时前
【Linux指南】动静态库系列(七):符号表与重定位:链接器如何把函数调用接起来
linux·前端·javascript
图扑软件11 小时前
中篇・运笔|统一 DataModel 底座,HT UI 组件万物同源
javascript·低代码·ui·性能优化·数据可视化
小小尚@12 小时前
WebGIS/ECharts 地图开发|MapLand 在线行政区划边界一键下载 GeoJSON 工具
前端·javascript·echarts
葡萄城技术团队13 小时前
工业数据可视化:使用活字格 AIcoding + Three.js 构建轻量化三维设备监控大屏
开发语言·javascript·信息可视化
默_笙13 小时前
🚍 一条 Todo 的奇幻漂流:TypeScript 全栈类型安全的"护照检查"
前端·javascript