Custom Mouse 自定义Cursor
项目介绍
资源链接
自定义Cursor
在光标移动的父容器Page中,创建自定义光标容器:
1 | <body class="body-content"> |
加上随意样式,最好是轮廓线条流畅的形状:
1 | :root{ |
设计控制光标的类,需要注意一些交互事件的触发时机:
- 鼠标点击事件
- 效果:点击轮廓变大,焦点变小,松开恢复原样
- 绑定事件:mousedown/mouseup
- 鼠标进入和交互元素事件
- 效果:移入轮廓变大,焦点变小,移出恢复原样
- 绑定事件:交互元素的mouseover/mouseleave
- 鼠标进入/离开屏幕事件
- 效果:进入屏幕透明度为1,离开屏幕透明度为0
- 绑定事件:mouseenter/mouseleave
- 鼠标移动事件
- 效果:移动鼠标,焦点定位,轮廓跟随
- 绑定事件:mousemove
1 | class Cursor{ |
背景跟随鼠标晃动
背景图片dom:
1 | <body> |
添加样式,注意背景图片需要比父容器稍微大一些,
这样即便在上下左右晃动时图片也不会被晃出父容器:
1 | *{ |
添加鼠标跟随晃动js脚本,
核心方法就是将鼠标相对屏幕的坐标,
转换为背景图片的偏移量。
1 | const bg = document.querySelector('body') |
其它
3D模型部分的实现
鼠标点击效果添加
鼠标点击出出现的波纹动画为是用Lottie实现的,
思路就是在获取鼠标点击处的坐标,
在点击数组中添加新的点位,
页面根据点击数组响应式渲染新Lottie组件,
监听Lottie组件的onComplete事件,确保在动画播放结束之后删除点击数据:
1 | import Lottie from "lottie-react"; |
click事件bug
这部分效果的实现存在一个bug,就是自定义光标监听了焦点的mousedown和mouseup事件,
鼠标点下和抬起构成一个完整的触发效果,
但是同时在鼠标点下时创建了一个波纹效果,波纹效果dom遮盖住了鼠标的mouseup事件的触发,
所以导致鼠标点下的缩放效果无法正常实现。
解决方法:将波纹效果dom的css属性point-event设置为none