实现鼠标追随效果

该博客介绍了如何利用HTML5、CSS3和JavaScript实现一个有趣的交互效果:当鼠标移动时,页面上的元素不仅跟随鼠标移动,而且根据鼠标移动的角度在Z轴上进行旋转,并在Y轴上进行翻转。文章详细讲解了HTML布局、JavaScript变量声明、鼠标移动事件监听、坐标计算、角度计算以及元素翻转的实现步骤。

呈现效果:

1.页面中的gif动图跟随鼠标移动

2.元素随鼠标移动角度进行z轴旋转以及在方向上进行Y轴上的翻转

HTML代码部分

<head>
  <style>
        .img {
            width: 50px;
            height: 50px;
            background-image: url("goat.gif");
            background-size: cover;
            position: absolute;
        }
    </style>
</head>
<body>
  <div class="img"></div>
</body>

js部分

首先声明变量的部分

    var img = document.querySelector('.img')
    // 定义小图片的旋转角度
    var deg = 0
    // 定义小图片位于网页左侧位置,用来定义图片的距离
    var imgx = 0
    // 定义小图片位于网页顶部位置
    var imgy = 0
    // 定义小图片X轴的位置,图片移动的数值
    var imgl = 0
    // 小图片y轴的位置,图片移动的数值
    var imgt = 0;
    // 定义小图片翻转的角度,y轴上翻转0/-180
    var y = 0;
    //  定义一个计数器
    var index = 0;

1.设置鼠标移动的函数,添加鼠标移动监听事件,

2.获得鼠标坐标的X轴Y轴位置,

3.使它减去移动元素起始的XY轴坐标和元素自身宽高的一半,即可得出元素要移动的距离

4.计算角度

5.判断是否需要元素翻转

window.addEventListener('mousemove', function (xyz) {
        // 获取网页左侧距离的图片的位置 
        // clientWidth表示元素内部的宽度
        imgx = xyz.x - img.offsetLeft - img.clientWidth / 2;
        // 获取网页的顶部距离的图片的位置
        imgy = xyz.y - img.offsetTop - img.clientHeight / 2;
        // 套入公式,定义图片的旋转角度
        deg = 360 * Math.atan(imgy / imgx) / (2 * Math.PI)
        // 每当鼠标移动的时候,重置index值
        index = 0;
        //   定义当前鼠标的位置
        var x = event.clientX
        //  当鼠标在图片右边时(X>offsetleft),图片需要翻转过来,否则不用
        if (img.offsetLeft < x) {
            y = -180
        } else {
            y = 0
        }
    })

 设置计数器,把元素要位移的距离分成50份,同时进行翻转

setInterval(() => {
        // 设置图片的旋转个翻转
        // rotateZ(90deg)rotateY(-180deg)
        img.style.transform = "rotateZ(" + deg + "deg) rotateY(" + y + "deg)"

        index++
        //  在这里设置小图片的位置和速度,并判断小图片到达鼠标位置时停下移动
        // imgx是每次鼠标的位置产生的距离差值,为了让小羊能精准的停下来,把这个差值分成50分,+=50次
        if (index < 50) {
            imgl += imgx / 50
            imgt += imgy / 50
        }
        img.style.left = imgl + "px"
        img.style.top = imgt + "px"
    }, 10)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值