当前位置:首页 > JavaScript

js实现游标

2026-04-03 19:56:35JavaScript

游标的基本概念

游标(Cursor)在JavaScript中通常指代用户在界面上的指针位置或文本选择的光标位置。根据应用场景不同,游标的实现方式也有所差异。

获取输入框游标位置

通过selectionStartselectionEnd属性可以获取或设置输入框中的游标位置:

const input = document.getElementById('myInput');
// 获取游标位置
const cursorPos = input.selectionStart;
// 设置游标位置
input.setSelectionRange(5, 5);

获取页面中的鼠标游标位置

通过监听mousemove事件获取鼠标在页面中的坐标:

js实现游标

document.addEventListener('mousemove', (event) => {
  const x = event.clientX;
  const y = event.clientY;
  console.log(`Cursor position: (${x}, ${y})`);
});

自定义游标样式

通过CSS修改鼠标指针样式:

body {
  cursor: url('custom-cursor.png'), auto;
}
.clickable {
  cursor: pointer;
}

文本编辑器中的游标控制

在可编辑元素(contentEditable)中控制游标:

js实现游标

const editor = document.getElementById('editor');
const range = document.createRange();
const node = editor.firstChild;
range.setStart(node, 5);
range.setEnd(node, 5);

const sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);

游标位置恢复技巧

保存并恢复输入框的游标位置:

function saveCursorPosition(input) {
  return {
    start: input.selectionStart,
    end: input.selectionEnd,
    value: input.value
  };
}

function restoreCursorPosition(input, saved) {
  if (input.value === saved.value) {
    input.setSelectionRange(saved.start, saved.end);
  }
}

跨浏览器兼容方案

处理不同浏览器间的游标API差异:

function getCursorPosition(input) {
  if ('selectionStart' in input) {
    return input.selectionStart;
  } else if (document.selection) {
    input.focus();
    const sel = document.selection.createRange();
    sel.moveStart('character', -input.value.length);
    return sel.text.length;
  }
  return 0;
}

虚拟游标实现

在Canvas等非DOM环境中实现虚拟游标:

const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
let cursorPos = { x: 0, y: 0 };

function drawCursor() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.fillStyle = 'black';
  ctx.fillRect(cursorPos.x, cursorPos.y, 2, 20);
  requestAnimationFrame(drawCursor);
}
drawCursor();

这些方法涵盖了JavaScript中游标操作的主要场景,包括输入框游标控制、鼠标位置跟踪、自定义样式以及复杂环境下的游标实现。根据具体需求选择合适的方法即可。

标签: 游标js
分享给朋友:

相关文章

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…

js实现删除

js实现删除

使用 splice 方法删除数组元素 splice 方法可以删除数组中的元素,并返回被删除的元素。它接受两个参数:起始索引和要删除的元素数量。 const array = [1, 2, 3, 4…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…