美文网首页
div随鼠标移动

div随鼠标移动

作者: 仙姑本姑 | 来源:发表于2019-12-15 18:40 被阅读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要设置绝对定位,不然不会移动
    • 注意设置偏移量时需要加上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>
    

    相关文章

      网友评论

          本文标题:div随鼠标移动

          本文链接:https://www.haomeiwen.com/subject/hqhlnctx.html