JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)

yizhihongxing

获取鼠标移动时的坐标是前端开发中常用的操作。随着浏览器的不断升级和发展,现在的浏览器大多都能支持 mousemove 事件和相应的 clientXclientY 属性来获取鼠标的坐标。不过对于兼容老版本IE(IE8及以下)的浏览器,我们需要使用其他的方式来获取鼠标坐标。

以下是 JavaScript 获取鼠标移动时的坐标的完整攻略:

1. 监听mousemove事件

我们可以通过监听 mousemove 事件获取鼠标在当前窗口的位置。该事件在鼠标移动时触发,我们获得坐标信息即可。 下面是监听 mousemove 事件的代码:

document.addEventListener('mousemove', function(event) {
  console.log('鼠标x轴坐标:' + event.clientX);
  console.log('鼠标y轴坐标:' + event.clientY);
});

在这段代码中,我们通过 addEventListener 方法来监听文档的 mousemove 事件,并在事件回调函数中输出鼠标的 clientXclientY 信息。

2. 兼容老版本浏览器

对于老版本的浏览器(IE8及以下版本),我们无法直接使用 addEventListener 方法来监听事件。此时我们可以使用 IE 提供的 attachEvent 方法实现事件监听。

document.attachEvent('onmousemove', function(event) {
  console.log('鼠标x轴坐标:' + event.clientX);
  console.log('鼠标y轴坐标:' + event.clientY);
});

这段代码中,我们使用了 attachEvent 方法来监听 mousemove 事件,并在事件回调函数中输出鼠标的 clientXclientY 坐标信息。这样我们就可以在老款浏览器中正确地获取鼠标的位置信息。

3. 处理浏览器兼容性

为了更好地处理浏览器兼容性,我们可以写一个通用的获取鼠标坐标的函数,代码如下:

function getMousePos(event) {
  var e = event || window.event;
  var posX = e.clientX;
  var posY = e.clientY;
  if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
    posX += document.documentElement.scrollLeft;
    posY += document.documentElement.scrollTop;
  } else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
    posX += document.body.scrollLeft;
    posY += document.body.scrollTop;
  }
  return {
    x: posX,
    y: posY
  };
}

这个函数可以优雅地处理老版本和新版本浏览器的兼容性,返回当前鼠标位置的 xy 坐标值。

示例说明

示例1

下面是一个示例,演示如何在页面中获取鼠标在当前窗口的位置。当用户移动鼠标时,页面会实时输出当前鼠标位置。即时效果:JSFiddle

<!DOCTYPE html>
<html>
  <head>
    <title>获取鼠标位置</title>
  </head>
  <body>
    <h1>获取鼠标位置</h1>
    <p>移动鼠标以查看当前位置</p>
    <script>
      document.addEventListener('mousemove', function(event) {
        var pos = getMousePos(event);
        console.log('鼠标x轴坐标:' + pos.x);
        console.log('鼠标y轴坐标:' + pos.y);
      });

      function getMousePos(event) {
        var e = event || window.event;
        var posX = e.clientX;
        var posY = e.clientY;
        if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
          posX += document.documentElement.scrollLeft;
          posY += document.documentElement.scrollTop;
        } else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
          posX += document.body.scrollLeft;
          posY += document.body.scrollTop;
        }
        return {
          x: posX,
          y: posY
        };
      }
    </script>
  </body>
</html>

在这个示例中,我们使用了 addEventListener 方法来监听文档的 mousemove 事件,并在事件回调函数中输出鼠标的 clientXclientY 信息。同时我们识别浏览器的类型,兼容老版IE。

示例2

下面是另一个示例,用于演示如何在页面中拖拽一个元素,同时实时输出当前鼠标位置。当鼠标拖动元素时,元素会跟随鼠标拖动,并输出实时坐标。即时效果:JSFiddle

<!DOCTYPE html>
<html>
  <head>
    <title>拖拽元素获取鼠标位置</title>
  </head>
  <body>
    <h1>拖拽元素获取鼠标位置</h1>
    <div id="draggable" style="background-color: #00f; color:#fff; width: 100px; height: 100px; position: absolute;">拖动我</div>
    <script>
      var draggable = document.getElementById('draggable');
      var pos1 = 0,
          pos2 = 0,
          pos3 = 0,
          pos4 = 0;

      draggable.addEventListener('mousedown', dragMouseDown);

      function dragMouseDown(e) {
        e = e || window.event;
        e.preventDefault();
        pos3 = e.clientX;
        pos4 = e.clientY;
        document.addEventListener('mousemove', elementDrag);
        document.addEventListener('mouseup', stopElementDrag);
      }

      function elementDrag(e) {
        e = e || window.event;
        e.preventDefault();
        var pos = getMousePos(e);
        pos1 = pos3 - pos.x;
        pos2 = pos4 - pos.y;
        pos3 = pos.x;
        pos4 = pos.y;
        draggable.style.top = (draggable.offsetTop - pos2) + "px";
        draggable.style.left = (draggable.offsetLeft - pos1) + "px";
        console.log('鼠标x轴坐标:' + pos.x);
        console.log('鼠标y轴坐标:' + pos.y);
      }

      function stopElementDrag() {
        document.removeEventListener('mousemove', elementDrag);
        document.removeEventListener('mouseup', stopElementDrag);
      }

      function getMousePos(e) {
        var e = e || window.event;
        var posX = e.clientX;
        var posY = e.clientY;
        if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
          posX += document.documentElement.scrollLeft;
          posY += document.documentElement.scrollTop;
        } else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
          posX += document.body.scrollLeft;
          posY += document.body.scrollTop;
        }
        return {
          x: posX,
          y: posY
        };
      }
    </script>
  </body>
</html>

在这个示例中,我们创建了一个可拖拽的元素,并使用 mousedownmousemovemouseup 事件相应鼠标拖拽元素的操作。在 elementDrag 函数中,我们利用 getMousePos 函数输出鼠标的实时位置信息,并让元素跟随鼠标移动。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox) - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • 使用UglifyJS合并/压缩JavaScript的方法

    当我们开发JavaScript应用程序时,经常需要将多个JavaScript模块进行合并,并对合并后的JavaScript代码进行压缩,以减小文件大小,提高加载速度。这个过程可以使用UglifyJS完成。以下是使用UglifyJS合并/压缩JavaScript的方法: 准备工作 在开始使用UglifyJS之前,我们需要先安装Node.js和npm包管理器。安…

    JavaScript 2023年5月27日
    00
  • Javascrip实现文字跳动特效

    实现文字跳动特效需要用到JavaScript中的定时器setInterval(),具体步骤如下: 创建一个div元素用来存放文字,设置其样式(如背景色、文字颜色、字体大小等)和文字内容。 将文字内容拆分为单个字符,并在其周围每个字符之间插入一个空格。 创建一个数组存储拆分后的字符,然后将数组中的每个元素用span标签进行封装,便于后续添加样式或进行单个字符操…

    JavaScript 2023年6月11日
    00
  • JavaScript中计算网页中某个元素的位置

    计算网页中某个元素的位置是前端开发中经常会遇到的需求,在JavaScript中可以通过以下步骤来实现: 获取元素 要计算某个元素的位置,首先需要获取到该元素。在JavaScript中,可以通过以下方法来获取元素: const element = document.getElementById(‘elementId’); 其中,’elementId’为要获取元…

    JavaScript 2023年6月11日
    00
  • Springboot通过lucene实现全文检索详解流程

    下面我将详细讲解Springboot通过lucene实现全文检索的完整攻略流程。 1. 环境准备 首先需要在项目中集成lucene相关的依赖。可以通过Maven或Gradle进行配置。这里以Maven为例,pom.xml文件中加入以下依赖: <dependency> <groupId>org.springframework.boot&…

    JavaScript 2023年6月11日
    00
  • JavaScript 封装Ajax传递的数据代码

    当我们需要使用Ajax进行数据传递时,通过JavaScript封装以实现数据传递是非常常见的做法。下面是一份完整的JavaScript封装Ajax传递数据的攻略。 攻略步骤 创建一个XMLHttpRequest对象 使用JavaScript中的XMLHttpRequest对象,用于与服务器进行交互。可以通过new XMLHttpRequest()方法来创建一…

    JavaScript 2023年6月1日
    00
  • js实现轮播图效果 纯js实现图片自动切换

    下面我将为您详细讲解如何使用纯js实现轮播图效果,并提供两个示例。 轮播图效果的实现 核心思路 实现轮播图效果,主要的核心思路是使用定时器(setInterval)对图片进行自动切换,并且在用户触发左右切换按钮时进行图片的手动切换。 具体来说,实现图片的自动切换需要以下步骤: 获取图片容器和图片列表的宽度、当前图片的索引 使用定时器不断地切换图片,每隔一定的…

    JavaScript 2023年6月11日
    00
  • 详解JavaScript+Canvas绘制环形进度条

    接下来我将详细讲解“详解JavaScript+Canvas绘制环形进度条”的完整攻略。 环形进度条简介 环形进度条是指一个环形背景,根据输入的进度值,填充相应的进度颜色。它可以展示操作的进度、网站的加载进度等等。 环形进度条实现方法 JavaScript+Canvas是一种流行的实现环形进度条的方式。 首先,我们需要在HTML中创建一个Canvas元素: &…

    JavaScript 2023年6月11日
    00
  • JS作为值的函数用法示例

    JS作为值的函数用法示例即为将函数定义作为一个值来使用,可以将函数定义作为一个变量赋值给变量、集合或对象中的属性,也可以将函数作为一个参数传递给其他函数。下面是两个示例说明: 示例一:将函数作为参数传递给其他函数 // 定义一个函数 function sayHi(name) { console.log(‘Hi ‘ + name + ‘!’); } // 定义…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部