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日

相关文章

  • html5 web本地存储将取代我们的cookie

    HTML5 Web本地存储指的是一种在客户端(浏览器)端进行数据存储的技术。它主要通过Web Storage API和IndexedDB API来实现。 与传统的Cookie相比,Web本地存储有诸多优点。例如,Web本地存储提供了比Cookie更大的存储空间,并且数据存储在本地,不需要每次请求都带上一份数据,从而减少了网络流量。 以下是使用Web本地存储来…

    JavaScript 2023年6月11日
    00
  • javascript格式化json显示实例分析

    接下来我将为你详细讲解“JavaScript格式化JSON显示实例分析”的完整攻略。 什么是JSON JSON是JavaScript Object Notation的缩写,是一种轻量级的数据交换格式。JSON使用文本来描述数据对象,与XML不同,JSON更容易阅读、编写、解析,因为它的语法格式比XML更简洁。 格式化JSON 在处理JSON格式的数据时,我们…

    JavaScript 2023年5月27日
    00
  • js操作数组函数实例小结

    让我来详细讲解一下“js操作数组函数实例小结”的攻略。 一、前言 JavaScript中的数组非常强大,可以通过使用一系列内置函数来实现对数组的操作,例如增删改查、排序等等。这些函数能给程序员带来很大的便利,让我们的编码效率成倍提升。 二、常用操作函数 下面是一些常用的操作数组的函数: 1. push和pop push和pop用于在数组的末尾添加或删除数据。…

    JavaScript 2023年5月27日
    00
  • 史上最全JavaScript常用的简写技巧(推荐)

    史上最全JavaScript常用的简写技巧(推荐) 在JavaScript编写代码时,我们经常需要用到很多语句,例如if语句、for循环、函数等等。这些语句可以通过使用JavaScript的简写技巧来让我们的代码更加简短,更加易读。下面就是一些常用的JavaScript简写技巧。 1. 赋值运算符的简写 1.1 增量与减量 我们可以使用“++”和“–”来实…

    JavaScript 2023年5月18日
    00
  • 再谈JavaScript线程

    再谈JavaScript线程 在 JavaScript 的多线程模型中,主线程(也称为 UI 线程)是唯一的线程,负责执行 JavaScript 代码、渲染页面,以及处理用户交互事件等任务。由于 JavaScript 是单线程执行的,因此它的处理能力是有限的。当某个耗时的任务需要执行时,主线程就会被阻塞,页面就会失去响应,用户体验也会受到影响。为了解决这个问…

    JavaScript 2023年5月28日
    00
  • JS中自定义事件与观察者模式详解

    那我来为你详细讲解一下关于“JS中自定义事件与观察者模式”的攻略。 一、 什么是自定义事件和观察者模式? 1. 自定义事件 在JavaScript中,浏览器提供了一些自带的事件,如 click、mouseover 等等。但有时候,我们需要在我们自己的应用程序中创建自定义事件,这就需要用到自定义事件技术了。 自定义事件即我们自己定义的事件,类似于浏览器内置的事…

    JavaScript 2023年5月19日
    00
  • 利用AjaxSubmit()方法实现Form提交表单后回调功能

    要实现Form提交表单后回调功能,我们可以使用jQuery中的AjaxSubmit()方法。这个方法可以使用ajax方式提交表单,而且可以在提交表单后回调函数中处理返回的数据。 下面是实现的详细步骤: 1.引用jQuery库和jQuery.form插件。 <script src="https://cdnjs.cloudflare.com/aj…

    JavaScript 2023年6月10日
    00
  • 如何一步步基于element-ui封装查询组件

    下面是一步步基于element-ui封装查询组件的完整攻略。 步骤一:安装element-ui 首先,我们需要在项目中安装并引入element-ui,可以通过以下命令进行安装: npm install element-ui -S 引入element-ui: import Vue from ‘vue’ import ElementUI from ‘elemen…

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