zoukankan      html  css  js  c++  java
  • 一文看懂js中的clientX,clientY,pageX,pageY,screenX,screenY

    一. 客户区坐标位置(clientX,clientY)

    鼠标事件都是在浏览器视口中的特定位置发生的。这个位置信息保存在事件对象的clientX和clientY属性中,所有浏览器都支持这两个属性。

    我们知道了这个位置信息我们可以做些什么了?举个例子,有时候我们需要获取鼠标在某一个元素中的相对位置,做一些事情,比如自定义拖动条。

    案例代码如下:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
    
            div.container {
                position: relative;
                height: 20px;
                width: 400px;
                border-radius: 20px;
                margin: 100px auto;
                background-color: red;
            }
    
            div.scrollbar {
                position: absolute;
                height: 40px;
                left: -20px;
                top: -10px;
                width: 40px;
                border-radius: 50%;
                background-color: green;
            }
        </style>
    </head>
    
    <body>
        <div class="container">
            <div class="scrollbar"></div>
        </div>
        <script>
            var container = document.querySelector('.container');
            var scrollbar = document.querySelector('.scrollbar');
            // 计算容器的offsetLeft
            var _left = container.offsetLeft;
            // 边界判断
            var leftMin = -scrollbar.clientWidth / 2;
            var leftMax = container.clientWidth - scrollbar.clientWidth / 2;
            scrollbar.onmousedown = function () {
                document.onmousemove = function (e) {
                    // 得到鼠标想对于容器container的左侧坐标
                    var left = e.clientX - _left;
                    left = Math.min(Math.max(leftMin, left), leftMax);
                    scrollbar.style.left = left + 'px';
                }
                document.onmouseup = function () {
                    this.onmousemove = null;
                }
            }
        </script>
    </body>
    
    </html>

    像这样子就实现了一个简易的拖动条(还需要优化,但是思路就是上面展现的思路)。

    二. 页面坐标位置(pageX,pageY)

    pageX和pageY两个属性代表鼠标光标在页面中的位置,因此坐标是从页面本身而非视口的左边和顶边计算的。在没有滚动的情况下,clientX和cilentY与pageX和pageY是相等的。在IE8及更早版本中是没有这个两个属性的,但是我们可以根据滚动信息和客户区坐标位置信息计算出来,下面给出兼容写法:

       var getPage = function (e) {
                var clientx = e.clientX;
                var clienty = e.clientY;
                var pagex = e.pageX;
                var pagey = e.pageY;
                if (!pagex) {
                    pagex = clientx + (document.documentElement.scrollLeft || document.body.scrollLeft);
                }
                if (!pagey) {
                    pagey = clienty + (document.documentElement.scrollTop || document.body.scrollTop);
                }
                return {
                    pageX: pagex,
                    pageY: pagey
                }
            }
            var div = document.querySelector('.myDiv');
            div.onclick = function (e) {
                getPage(e);
            }

     三. 屏幕坐标位置

    鼠标事件发生的时候,不仅仅会有相对于浏览器的窗口,还有一个相对于整个电脑屏幕的位置。通过事件对象中的screenX和screenY属性就可以获得相关的属性信息。

    看一段代码:

      var div = document.querySelector('.myDiv');
            div.onclick = function (e) {
                console.log(e.screenX);
                console.log(e.screenY);
            }

    这样就获取了相对于电脑屏幕的位置信息。

  • 相关阅读:
    php iconv函数转换出错问题
    linux 上配置swoole
    Linux中查看某 个软件的安装路径
    mysql 5.0存储过程学习总结
    maven--私服的搭建(Nexus的使用)
    Linux的chattr与lsattr命令详解
    [转]Delphi 中 image 控件加载bmp、JPG、GIF、PNG等图片的办法
    [转]Delphi 中动态链接库(dll)的建立和使用
    Delphi PChar与String互转
    [转]Delphi 快捷键 让你更像高手!!
  • 原文地址:https://www.cnblogs.com/jsydb/p/12344622.html
Copyright © 2011-2022 走看看