div随鼠标移动

2019-12-15  本文已影响0人  仙姑本姑

目标:div在页面中可随鼠标移动

第一步:为移动的box添加偏移量

#box {
            position: absolute;
            width: 200px;
            height: 100px;
            background-color: brown;
        }
 window.onload = function() {
            var box = document.getElementById("box");
            box.onmousemove = function(event) {
                event = event || window.event;
                var left = event.clientX;
                var top = event.clentY;
                box.style.left = left + "px";
                box.style.top = top + "px";
            }
        }

第二步:选择事件绑定目标

如果将事件绑定在box上,那么只有鼠标向下向右移动时,才处于box的区间内,才能完成事件响应,但如果想要向左,向上移动,就不能将事件绑定在box上,应绑定在document上

 document.onmousemove = function(event) {
                event = event || window.event;
                var left = event.clientX;
                var top = event.clientY;
                box.style.left = left + "px";
                box.style.top = top + "px";
            }

此时,因为使用的是clientX,是用于获取鼠标在当前的可见窗口的坐标,而div的偏移量,是相对于整个页面的。所以此时增加body高度或宽度,就会因为client与div在页面滚动时(0,0)点位置不同,使鼠标与div分离。

且此时鼠标与div之间的距离 = 窗口滚动的距离;

第三步 当页面需要滚动时,选择pageX与pageY

  window.onload = function() {
            var box = document.getElementById("box");
            document.onmousemove = function(event) {
                event = event || window.event;
                var left = event.pageX;
                var top = event.pageY;
                box.style.left = left + "px";
                box.style.top = top + "px";
            }
        }

pageX和pageY可以获取鼠标相对于当前页面的坐标
但是这个两个属性在IE8中不支持,所以如果需要兼容IE8,则不要使用

为兼容浏览器,需要修改div偏移量,将窗口滚动距离加到div偏移量里

第四步,获取窗口滚动偏移量

chrome认为浏览器的滚动条是body的,可以通过body.scrollTop来获取,火狐等浏览器认为浏览器的滚动条是html的,同样,为了兼容不同浏览器

 var st = document.body.scrollTop || document.documentElement.scrollTop;
 var sl = document.body.scrollLeft || document.documentElement.scrollLeft;

完整源码为:

<!DOCTYPE  HTML>
<html>

<head>
    <meta charset="UTF-8">
    <title>DOM-login</title>
    <style type="text/css">
        body {
            width: 500px;
            height: 1500px;
            background-color: darkslateblue;
        }
        
        #box {
            position: absolute;
            width: 200px;
            height: 100px;
            background-color: brown;
        }
    </style>
    <script type="text/javascript">
        window.onload = function() {
            var box = document.getElementById("box");
            document.onmousemove = function(event) {
                event = event || window.event;
                var left = event.clientX;
                var top = event.clientY;
                var st = document.body.scrollTop || document.documentElement.scrollTop;
                var sl = document.body.scrollLeft || document.documentElement.scrollLeft;
                console.log(st);
                box.style.left = left + sl + "px";
                box.style.top = top + st + "px";
            }
        }
    </script>
</head>

<body>
    <div id="box"></div>
</body>


</html>
上一篇下一篇

猜你喜欢

热点阅读