纯 CSS 如何实现鼠标跟随效果?(代码详解)

鼠标跟随,顾名思义,就是元素会跟随着鼠标的移动而作出相应的运动。通常而言,css 负责表现,javascript 负责行为。而鼠标跟随这种效果属于行为,要实现通常都需要借助 js。

当然,本文的重点,就是介绍如何在不借助 JS 的情况下使用 CSS 来模拟实现一些鼠标跟随的行为动画效果。

我们先来看看鼠标跟随效果是什么样的:

1.gif

原理

以上面的 Demo 为例子,要使用 CSS 实现鼠标跟随,最重要的一点就是:

立即学习“前端免费学习笔记(深入)”;

如何实时监测到当前鼠标处于何处?

OK,其实很多 CSS 效果,都离不开 障眼法 二字。要监测到当前鼠标处于何处,我们只需要在页面上铺满元素即可:

我们使用 100 个元素,将整个页面铺满,hover 的时,展示颜色,核心 SCSS 代码如下:

... // 100个
.g-container {    position: relative;    width: 100vw;    height: 100vh;} .position {    position: absolute;    width: 10vw;    height: 10vh;} @for $i from 0 through 100 {         $x: $i % 10;    $y: ($i - $x) / 10;         .position:nth-child(#{$i + 1}) {        top: #{$y * 10}vh;        left: #{$x * 10}vw;    }     .position:nth-child(#{$i + 1}):hover {        background: rgba(255, 155, 10, .5)    }}

可以得到这样的效果:

2.gif

好的,如果把每个元素的 hover 效果去掉,那么这个时候操作页面,其实是没有任何效果的。但同时,通过 :hover 伪类,我们又是可以大概得知当前鼠标是处于页面上哪个区间的。

好继续,我们再给页面添加一个元素(圆形小球),将它绝对定位到页面中间:

.ball {    position: absolute;    top: 50%;    left: 50%;    width: 10vmax;    height: 10vmax;    border-radius: 50%;    transform: translate(-50%, -50%);}

最后,我们借助 ~ 兄弟元素选择器,在 hover 页面的时候(其实是 hover 一百个隐藏的 div),通过当前 hover 到的 div,去控制小球元素的位置。

@for $i from 0 through 100{         $x: $i % 10;    $y: ($i - $x) / 10;         .position:nth-child(#{$i + 1}):hover ~ .ball {        top: #{$y * 10}vh;        left: #{$x * 10}vw;    }}

至此,一个简单的纯 CSS 实现鼠标跟随的效果就实现了,方便大家理解,看看下面这张图就明白了:

3.gif

完整的DEMO,你可以戳这里看看:CodePen Demo — CSS实现鼠标跟随

存在的问题

就上面的 Demo 来看,还是有很多瑕疵的,譬如

精度太差

只能控制元素运动到 div 所在空间,而不是精确的鼠标所在位置,针对这一点,我们可以通过增加隐藏的 div 的数量来优化。譬如将 100 个平铺 div 增加到 1000 个平铺 div。

运动不够丝滑

效果看起来不够丝滑,这个可能需要通过合理的缓动函数,适当的动画延时来优化。

燥起来吧

嗯。原理掌握了,下面我们来看看,使用这个技巧还能鼓捣出什么有意思的效果。

CSS鼠标跟随按钮效果

一开始,我在 CodePen 上看到了下面这个效果,使用了 SVG + CSS + JS 实现,我就想着,仅用 CSS,能不能 copy 一下:

4.gif

CodePen Demo — Gooey mouse follow

好吧,理想很丰满,现实很骨感。仅仅使用 CSS,还是有诸多限制。

但是我们还是可以使用上述介绍的方法实现鼠标跟随

利用 CSS 滤镜 filter: blur() contrast() 模拟元素融合,具体可以看看这篇文章:你所不知道的 CSS 滤镜技巧与细节

好,看看仅仅使用 CSS 的破产版模拟效果:

5.gif

有点太太太奇怪了,可以稍微收敛点效果,通过调整颜色,滤镜强度(就是各种尝试…),得到一个稍微好一丢丢丢的类似效果:

6.gif

Demo 戳我,CodePen Demo — CSS鼠标跟随按钮效果

全屏鼠标跟随动画

OK,继续,下面来点更炫的。嗯,就是那种华而不实的。sweat_smile

如果我们控制的不止一个元素,而是多个元素。多个元素之间的动画效果再设定不同的 transition-delay ,顺序延迟运动。哇哦,想想就很激动。譬如这样:

7.gif

CodePen Demo — 鼠标跟随动画 PURE CSS MAGIC MIX

如果我们能更有想象力一点,那么可以再碰撞出多一点的火花:

8.gif

这个效果是我非常喜欢的一位日本 CodePen 作者 Yusuke Nakaya 的作品,源代码: Demo — Only CSS: Water Surface

鼠标跟随指示

当然,不一定要指示元素运动。使用 div 铺满页面捕捉元素当前位置的技巧,还可以运用在其他一些效果上,譬如指示出鼠标运动轨迹:

9.gif

1、默认的铺满背景的 div 的 transition-duration: 0.5s

2、当 hover 到元素背景 div 的时候,改变当前 hover 到的 div 的 transition-duration: 0s,并且 hover 的时候赋予背景色,这样当前 hover 到的 div 会立即展示

3、当鼠标离开 div,div 的 transition-duration 变回默认状态,也就是 transition-duration: 0.5s,同时背景色消失,这样被离开的 div 的背景色将慢慢过渡到透明,造成虚影的效果

CodePen Demo — cancle transition

最后

其实还有很多有意思的用法,感兴趣的同学可以自己动手,更多的去尝试,组合。

经常有人会问我,这些奇奇怪怪的用法实际业务中用得上吗?到底有用没用。额,我的看法是也许业务中真的用不上或者应用场景极为有限,但是多了解一些,能在遇到问题的时候多点选择,多一些思考的空间,更好的发散思维,至少是无害吧。

更多你可能想都想不到的有趣的 CSS 你可以来这里瞧瞧:

CSS-Inspiration — CSS灵感

好了,本文到此结束,希望对你有帮助 :)

本文转自:https://www.cnblogs.com/coco1s/p/10481872.html

更多炫酷CSS3、html5、javascript、jQuery特效代码,尽在:js特效大全

以上就是纯 CSS 如何实现鼠标跟随效果?(代码详解)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1615532.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 04:56:47
下一篇 2025年12月24日 04:56:57

相关推荐

  • 一文搞懂 flex中的自动 margin

    为了引出本文的主题,先看看这个问题,最快水平垂直居中一个元素的方法是什么? 水平垂直居中也算是 CSS 领域最为常见的一个问题了,不同场景下的方法也各不相同,各有优劣。嗯,下面这种应该算是最便捷的了: .g-container { display: flex;} .g-box { margin: a…

    2025年12月24日 好文分享
    000
  • css伪类选择器介绍

    伪类选择器: (推荐学习:css快速入门) 1、link、hover、active、visited a:link(未访问的链接状态),用于定义了常规的链接状态。 a:hover(鼠标放在链接上的状态),用于产生视觉效果。 立即学习“前端免费学习笔记(深入)”; a:active(在链接上按下鼠标时的…

    2025年12月24日
    000
  • css如何垂直对齐容器中的元素

    可以利用css3的transform来实现容器中的元素垂直对齐。 (推荐学习:css快速入门) 具体代码实现: .verticalcenter{ position: relative; top: 50%; -webkit-transform: translateY(-50%); -o-transfo…

    2025年12月24日
    000
  • 详谈CSS的flex布局(图文介绍)

    我们之前已经学过一些布局模型,比如说浮动,绝对定位等等,但是这些布局方式一是不够简洁,而是使用的范围确实是太窄了。 flex模型拥有比较多的属性,来设置多样的布局方式,接下来我们就详细介绍各种属性对布局的改变,最后再对属性做一个汇总 先看一下flex的基本模型,如下图所示: 立即学习“前端免费学习笔…

    2025年12月24日 好文分享
    000
  • 如何利用纯css实现图片轮播

    实现思路: (推荐学习:css快速入门) 准备相同大小的多个图片 将要展示图片横排放在一个图片容器里面 在图片容器外再加一个展示容器,展示容器大小为图片大小 立即学习“前端免费学习笔记(深入)”; 给图片容器添加自定义动画,在动画不同阶段设置递增的偏移值 注意事项: 动画效果分为切换和停留两部分 自…

    2025年12月24日
    000
  • 了解css中的关键字initial、inherit、unset、revert和all属性

    在CSS中,有4个关键字理论上可以应用于任何的CSS属性,它们是initial(初始)、inherit(继承)、unset(未设置)、revert(还原)。而all的取值只能是以上这4个关键字。本文将介绍initial、inherit、unset、revert和all。 initial 表示元素属性…

    2025年12月24日
    000
  • css如何实现模糊背景效果

    普通背景模糊 (推荐教程:css快速入门) 为了美观不能使背景前的文字模糊,而filter属性会使这整个div的后代并且还会出现白边。也就是说无法达到这个效果。怎么办呢?我们可以使用伪元素,这样我们也顺便解决了白边的问题。 实现思路: 在父容器中设置背景,并且使用相对定位,方便伪元素重叠。而在:af…

    2025年12月24日 好文分享
    000
  • 带你玩转css中各种方向小箭头

    在开发页面的时候,遇到很多的列表都需要用到箭头,可以直接用图片作背景铺垫,纯CSS也能实现,并且没有兼容性顾虑,不用CSS3,相比而言,比图片更好用。 原理:一个高宽相等的正方形,选取你所需要的某一边,截取之,就是一个梯形,当高宽都为0,且其他边为透明颜色时,一个三角形就出来了 梯形代码: html…

    2025年12月24日 好文分享
    000
  • css如何实现文字外发光效果

    可以通过text-shadow属性来实现文字外发光效果。 (推荐教程:css快速入门) 代码示例: h1{text-shadow: .2rem 0rem .5rem red,-.2rem 0rem .5rem red,0rem .2rem .5rem red,0rem -.2rem .5rem re…

    2025年12月24日
    000
  • display:block属性的作用是什么

    css中的display是设置元素显示的方式,block是一块状元素的方式显示,inline是以内联元素的方式显示,none是不显示,块状元素会单独占据一样,其他元素跟他在同一行的会被迫换行,挤到下一行。 css中的display是设置元素显示的方式,block是一块状元素的方式显示,inline是…

    2025年12月24日
    000
  • block元素的特点有哪些

    block元素的特点有:1、总是在新行上开始;2、高度,行高以及顶和底边距都可控制;3、宽度缺省是它的容器的100%,除非设定一个宽度。 块元素特点:1.独占一行2.元素的宽高和内外边距都可以设置3.宽度如果不设置就是父级元素的100%常见的块元素有以下几种:p div table h1 h2 h3…

    2025年12月24日
    000
  • style标签的作用是什么

    style标签的作用是用来说明所要定义的样式,style标签用于为HTML文档定义样式信息,在style元素里,可以指定HTML元素在浏览器里的呈现方式,style标签应放在head里。 定义及用法 标签用于为HTML文档定义样式信息。 在元素里,你可以指定HTML元素在浏览器里的呈现方式。 必选属…

    2025年12月24日
    000
  • CSS中@import是什么意思?

    在CSS中@import是导入CSS样式表,这种方式通常会在CSS文件中使用,这样做的好处是,可以把多个样式表导入到一个样式表中,从而在页面里面只需要导入一个样式表即可。 视频教程推荐:《css视频教程-玉女心经版》 引入CSS的方法有两种,一种是@import,一种是link @import ur…

    2025年12月24日
    000
  • CSS实现轮播图效果(附代码)

    CSS实现轮播图效果(附代码) 理论基础 CSS3 animation 属性和 @keyframes 规则 主体思想 1、准备相同大小的多个图片 立即学习“前端免费学习笔记(深入)”; 2、将要展示图片横排放在一个图片容器里面 3、在图片容器外再加一个展示容器,展示容器大小为图片大小 4、给图片容器…

    2025年12月24日
    000
  • CSS盒子模型是什么意思?

    CSS盒子模型都具备内容content、内边距padding、边框border、外边距margin这些属性,这些属性可以用日常生活中的常见事物“盒子”作一个比喻来理解,所以称作为盒子模型。 css (cascading style sheet)可译为“层叠样式表 ”或“级联样式表”,它定义如何显示h…

    2025年12月24日
    000
  • CSS 布局之两端布局实现

    最近在进行开发的过程中,有遇到两端对齐的布局,是按照百分比来进行布局的,之前有用过flex布局,但是flex布局,使用两端布局的时候,会出现一切bug。比如,下面的是动态生成的时候,三列或者多列就会把下面的列表分布在两边。虽然可以解决,但是还是想看一下用普通的css是如何布局的。因为就写了这个。 在…

    2025年12月24日
    000
  • css中一个冒号和两个冒号分别代表什么?

    一个冒号是伪类,两个冒号是伪元素。 (推荐学习:css快速入门) 伪类可以独立于文档的元素来分配样式,且可以分配给任何元素,逻辑上和功能上类类似,但是其是预定义的、不存在于文档树中且表达方式也不同,所以叫伪类。 伪元素所控制的内容和一个元素控制的内容一样,但是伪元素不存在于文档树中,不是真正的元素,…

    2025年12月24日
    000
  • 使用 CSS 实现一个简单的骨架屏(Skeleton Screen)

    前言 在加载网络数据时,为了提升用户体验,通常会使用一个转圈圈的loading动画,或者使用skeleton screen占位。相比与loading动画,skeleton screen的效果要更生动,实现起来来也很简单。利用css就可以实现一个简单的skeleton screen。(什么是骨架屏(s…

    2025年12月24日 好文分享
    000
  • CSS结构性伪类选择器—nth-of-type实现自定义导航菜单案例解析(代码实例)

    本文目标: 1、掌握css中结构性伪类选择器—nth-of-type的用法 问题: 1、实现以下自定义导航菜单,且使用纯DIV+CSS,必须使用结构性伪类选择器—nth-of-type 附加说明: 1、导航宽800px,高90px,居中显示 立即学习“前端免费学习笔记(深入)”; 2、雪花背景图片宽…

    2025年12月24日 好文分享
    000
  • css选择器有哪些?哪些属性是可以继承的?

    css选择器: id选择器(#myid)、类选择器(.myclassname)、标签选择器(div, h1, p)、相邻选择器(h1 + p)、子选择器(ul > li)、后代选择器(li a)、通配符选择器(*)、属性选择器(a[rel=”external”])、伪类选择器(a:hover,…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信