随着互联网的发展,更加注重与用户的交互体验,这也推动了网页设计的转变,越来越多的网页开始使用各种炫酷动效来增强用户的体验感。其中,鼠标跟随效果是一种很不错的动效,它不仅可以让网页看起来更加活泼生动,还能增加用户对网页的好感度。本文将从实现这种效果的代码入手,为大家介绍一些优雅实现鼠标跟随效果的代码。
鼠标跟随效果的实现思路
在实现鼠标跟随效果之前,我们需要了解一下他的实现原理。鼠标跟随效果其实就是在鼠标移动时,让某个元素随着鼠标移动而移动,而该元素通常是一个小图标或者一个小图片。那么具体实现的思路是:
1. 监听鼠标移动事件
2. 获取鼠标的坐标,并将其赋值给目标元素
3. 在页面中显示目标元素
说的简单,但是具体实现的麻烦依然是有的,下面我们就来看一下一些优雅的实现方式。
利用CSS3的transform实现
随着CSS3的不断发展,我们可以使用更多的CSS属性来实现各种动画效果,其中transform属性是一个非常有用的属性,它可以用来实现旋转、缩放、移动等效果,也可以用来实现鼠标跟随效果:
```css
.follow{
position: fixed;
top: 0;
left: 0;
transition: transform .2s ease-out;
pointer-events: none; /*禁止对这个元素的事件操作*/
}
```
```javascript
document.addEventListener('mousemove', (e) => {
let follow = document.querySelector('.follow');
let x = e.clientX;
let y = e.clientY;
follow.style.transform = `translate3d(${x}px, ${y}px, 0)`;
});
```
上面的代码中,我们给目标元素添加了一个类名follow,并给该元素设置了fixed定位以及一些CSS属性,其中,pointer-events: none的作用是禁止对这个元素进行事件操作,这样就不会影响到页面的其他操作。另外,transition属性和后面的表达式代表了动画的过渡效果和时间。
接着,我们通过监听鼠标mousemove事件,获取到鼠标的坐标,并将其赋值给目标元素,同时使用translate3d属性来实现元素的移动,这里注意的是,translate3d可以使用硬件加速,会比translate更加流畅。
利用jQuery的实现方式
jQuery是一种集DOM操作、事件处理、动画效果为一体的javascript库,它简单易用,功能强大,是网页交互开发中经常使用的一种工具。如果项目中已经使用了jQuery库,下面的代码可以为您带来很大的便利:
```html
```
```javascript
$(document).mousemove(function (e) {
var x = e.pageX,
y = e.pageY;
$('.follow').animate({
'left': x,
'top': y
}, 300);
});
```
上面的代码中,我们先在页面中添加一个图片元素,然后使用jQuery的mousemove事件来监听鼠标移动,获取到鼠标坐标,并将其赋值给目标元素,在使用animate方法实现目标元素的移动,其中动画效果可以根据实际情况进行调整。
利用canvas实现鼠标跟随效果
对于一些复杂的场景,我们也可以使用canvas来实现鼠标跟随效果,canvas属于HTML5技术之一,具有高度自定义性以及呈现效果良好的特点。
```html
```
```javascript
var canvas = document.getElementById('canvas');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
var ctx = canvas.getContext('2d');
var pos = {x:0, y:0};
var nodes = [];
var range = 100;
function init(){
for(var i=0;i<50;i++){
var x = Math.random() * canvas.width,
y = Math.random() * canvas.height,
dx = (Math.random() - 0.5) * 2,
dy = (Math.random() - 0.5) * 2;
var node = new Node(x, y, dx, dy, 2);
nodes.push(node);
}
}
function Node(x, y, dx, dy, r){
this.x = x;
this.y = y;
this.dx = dx;
this.dy = dy;
this.r = r;
}
Node.prototype.draw = function(){
ctx.beginPath();
ctx.arc(this.x, this.y, this.r, 0, Math.PI*2);
ctx.closePath();
ctx.fillStyle = '#eee';
ctx.fill();
}
Node.prototype.update = function(){
if(this.x < 0 || this.x > canvas.width){
this.dx = -this.dx;
}
if(this.y < 0 || this.y > canvas.height){
this.dy = -this.dy;
}
this.x += this.dx;
this.y += this.dy;
var xdiff = this.x - pos.x,
ydiff = this.y - pos.y,
dist = Math.sqrt(xdiff * xdiff + ydiff * ydiff);
if(dist < range){
var opacity = 1 - dist / range;
ctx.beginPath();
ctx.moveTo(this.x, this.y);
ctx.lineTo(pos.x, pos.y);
ctx.closePath();
ctx.strokeStyle = `rgba(238,238,238, ${opacity})`;
ctx.stroke();
}
}
function render(){
ctx.clearRect(0,0,canvas.width,canvas.height);
for(var i=0;i nodes[i].draw(); nodes[i].update(); } requestAnimationFrame(render); } render(); document.addEventListener('mousemove', function(e){ pos.x = e.clientX; pos.y = e.clientY; }); init(); ``` 上面的代码中,我们先在页面中添加一个canvas元素,然后获取到该元素的上下文,接着用一个类Node来表示每一个小圆点,然后在init函数中初始化了一些小圆点,使用mousemove事件来监听鼠标移动,不断更新鼠标的位置,并将其赋值给pos变量。最后,使用requestAnimationFrame方法不停地更新页面,实现了小圆点和鼠标交互的效果。 结语 上面介绍了三种实现鼠标跟随效果的方式,无论是利用CSS3的transform,jQuery的事件方法,还是canvas绘制,都能够实现鼠标跟随效果。在具体选择什么方式的时候,你可以根据自己的实际需求以及技能水平进行选择。另外,了解实现鼠标跟随效果的基本原理,对于我们理解网页动效有很大的帮助。