js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器

要获得指定控件输入光标的坐标,我们可以使用以下步骤:

  1. 获取页面中的指定控件对象
  2. 获取控件对象相对于页面左上角的位置
  3. 获取控件中光标的位置
  4. 将相对位置和光标位置相加,计算出光标在页面中的实际位置

以下是具体的实现步骤:

1.获取页面中的指定控件对象

我们可以使用document.getElementById方法获取指定id值的控件对象。例如,我们要获取id为txtInput的文本框对象,可以使用以下代码:

var txtInput = document.getElementById('txtInput');

2.获取控件对象相对于页面左上角的位置

我们可以使用Element.getBoundingClientRect()方法获取指定元素的相对于视口的位置大小信息。这个API返回一个DOMRect对象,里面包含了top、left、right和bottom四个属性,可以分别获取元素的上下左右边缘在视口中的位置,以及元素的宽度和高度。

var rect = txtInput.getBoundingClientRect();
var left = rect.left;
var top  = rect.top;

为了兼容不同浏览器,我们可以使用以下代码获取元素相对于页面的位置:

var left = document.documentElement.scrollLeft + rect.left;
var top  = document.documentElement.scrollTop + rect.top;

3.获取控件中光标的位置

要获取控件中光标的位置,我们可以使用Selection对象和Range对象。 Selection对象代表用户选择的文本范围或插入符号的位置。 Range对象则代表文档中的一段连续的区域。

var selection = window.getSelection();
var range = selection.getRangeAt(0);
var cursorOffset = range.startOffset;

在这个例子中,我们假设用户只选中了控件中的一段文本,因此我们可以使用getRangeAt(0)方法,获取一个表示光标位置的Range对象。 然后使用startOffset属性,获取光标相对于文本区域起始位置的偏移量。如果用户没选中任何文本,那么我们需要手动计算光标的位置。

4.将相对位置和光标位置相加,计算出光标在页面中的实际位置

最后,我们将相对位置和光标位置相加,就可以得到光标在页面中的实际位置。也就是说,我们需要在第2步代码的基础上,再添加以下代码即可:

var cursorLeft = left + txtInput.offsetWidth;
var cursorTop = top + range.getBoundingClientRect().top;

这里,offsetWidth可以获取到控件的宽度,而getBoundingClientRect().top可以获取到光标距离控件上边缘的距离。

以下是一个完整的例子:

<input id="txtInput" type="text" value="hello, world!">

<script>
var txtInput = document.getElementById('txtInput');

var rect = txtInput.getBoundingClientRect();
var left = document.documentElement.scrollLeft + rect.left;
var top  = document.documentElement.scrollTop + rect.top;

var selection = window.getSelection();
var range = selection.getRangeAt(0);
var cursorOffset = range.startOffset;

var cursorLeft = left + txtInput.offsetWidth;
var cursorTop = top + range.getBoundingClientRect().top;

console.log(cursorLeft, cursorTop);
</script>

这个例子输出的结果是光标在页面中的实际位置。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器 - Python技术站

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

相关文章

  • Js遍历键值对形式对象或Map形式的方法

    当我们需要遍历键值对形式的对象或Map时,可以使用JavaScript中的for…in循环和forEach方法。 for…in循环 for…in循环可以遍历对象和Map中的所有键值对,格式如下: for(var key in obj/map) { // 对每个键值对进行操作 } 其中,key是对象/Map中的每个键,obj/map是我们需要遍历的…

    JavaScript 2023年5月27日
    00
  • javascript系统时间设置操作示例

    下面是关于”JavaScript系统时间设置操作示例”的完整攻略。 1. 简介 时间是计算机世界中的基本元素,而JavaScript也提供了一些相关的API允许我们进行时间操作。系统时间设置是其中的一项,它可以帮助我们动态的调整JavaScript代码中的时间,也可以帮助我们进行一些测试与调试。 2. 设置系统时间 2.1 系统时间获取 在设置系统时间之前,…

    JavaScript 2023年5月27日
    00
  • JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例

    下面我将详细讲解JavaScript处理HTML事件、键盘事件、鼠标事件的攻略,包括基础概念、代码实现和示例说明。 HTML事件 基础概念 HTML事件是页面元素在浏览器中发生的特定操作,如点击、鼠标移动、键盘按下等。在JavaScript中,我们可以通过事件驱动来实现对HTML事件的处理。 代码实现 // 获取对应元素 var ele = document…

    JavaScript 2023年6月11日
    00
  • js删除对象属性的多种方法举例

    关于“js删除对象属性的多种方法举例”的攻略,我来给你详细讲解一下。 一、删除对象属性的多种方法 1. 使用 delete 操作符 使用 delete 操作符可以删除对象的指定属性。具体语法如下: delete objectName.propertyName; 其中,objectName 是指要删除属性的对象,propertyName 是指要删除的属性名。需…

    JavaScript 2023年5月27日
    00
  • JavaScript地理位置信息API

    JavaScript地理位置信息API可以让你的网站或应用程序访问用户的地理位置。本攻略将介绍如何使用JavaScript地理位置信息API获取用户的地理位置,并展示两个基于API实现的示例。 地理位置信息API介绍 Geolocation接口提供了方法来获取设备的地理位置信息。当用户请求此操作时,Geolocation会尝试确定用户的地理位置并返回该信息给…

    JavaScript 2023年6月11日
    00
  • js中函数调用的两种常用方法使用介绍

    JS中函数调用的两种常用方法是函数声明与函数表达式,下面我将对这两种方法进行介绍和举例子说明。 1. 函数声明 函数声明的形式如下: function functionName(parameters) { //函数体 } 其中,functionName 是函数名,parameters 是参数列表,函数体里面可以写任何合法的 JS 代码。函数声明完之后,我们可…

    JavaScript 2023年5月27日
    00
  • 微信小程序 常见问题总结(4058,40013)及解决办法

    微信小程序常见问题总结(4058, 40013)及解决办法 微信小程序是一个新兴的移动应用程序,然而不幸的是,用户有时会遇到某些错误代码。这些错误代码可能会妨碍小程序的正常访问,导致小程序崩溃或其他问题。在本文中,我们将讨论微信小程序的两个最常见错误代码(4058和40013),并提供解决方案来解决此类问题。 错误代码4058 错误代码4058在微信小程序中…

    JavaScript 2023年6月11日
    00
  • JavaScript 简写语法

    JavaScript 简写语法 1、简写的闭包自执行函数(Immediately Invoked Function Expression (IIFE)) 使用括号将函数定义包裹起来,再在末尾加上另一对括号,即可创建一个自执行函数。例如: (() => { console.log(“Hello, world!”); })(); 2、简写的对象方法定义(M…

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