[js] 元素随着鼠标移动(在父div下)

    <div>
        <p></p>
    </div>
 * {
            margin: 0;
            padding: 0;
        }

        body {
            height: 5000px;
        }

        div {
            width: 300px;
            height: 300px;
            border: 20px solid #000;
            margin: 50px auto;
            position: relative;
        }

        p {
            width: 50px;
            height: 50px;
            background: pink;
            position: absolute;
            top: 0;
            left: 0;
        }
        // 获取标签对象
        var oDiv = document.querySelector('div');
        var oP = document.querySelector('p');

        // 父级标签 和 页面的间距
        var oDivLeft = oDiv.offsetLeft;
        var oDivTop = oDiv.offsetTop;

        // 父级标签 边框线宽度
        var oDivBorderLeft = oDiv.clientLeft;
        var oDivBorderTop = oDiv.clientTop;

        // 父级标签占位 内容+padding
        var oDivWidth = oDiv.clientWidth;
        var oDivHeight = oDiv.clientHeight;

        // 获取标签占位 内容+padding+border
        var oPWidth = oP.offsetWidth;
        var oPHeight = oP.offsetHeight;

        // 给div添加点击事件
        oDiv.addEventListener('click', function (e) {
            // 计算 p标签定位的数据
            // 定位数值 = 鼠标点击坐标 - 父级左侧间距 - 父级左侧边框线宽度 - 定位标签占位/2
            var x = e.pageX - oDivLeft - oDivBorderLeft - oPWidth / 2;
            var y = e.pageY - oDivTop - oDivBorderTop - oPHeight / 2;

            // 极值的判断

            // 最小值是0
            x = x < 0 ? 0 : x;
            y = y < 0 ? 0 : y;

            // 最大值 父级占位(内容+padding) - 定位标签占位(内容+padding+border)
            x = x > oDivWidth - oPWidth ? oDivWidth - oPWidth : x;
            y = y > oDivHeight - oPHeight ? oDivHeight - oPHeight : y;

            // 将结果赋值给 定位标签 定位属性
            oP.style.left = x + 'px';
            oP.style.top = y + 'px';

        })

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值