代码:

<!DOCTYPE html>
<html> <head>
<title>计算屏幕坐标</title> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <style type="text/css">
body {
margin: 0;
padding: 0;
} #msg {
background-color: #eeeeee;
height: 200px;
}
</style>
</head> <body>
<div id="msg"></div> <script type="text/javascript">
let div = document.querySelector('#msg');
let msg = '';
let firstPoint = getPoint(0, 0); window.onresize = function (e) {
setTimeout(() => {
firstPoint = getPoint(0, 0);
showPoint();
}, 100);
} window.onmousemove = function (e) {
setTimeout(() => {
showPoint(e);
}, 100);
} function showPoint(e) {
msg = '';
let point;
if (e) {
point = getPoint(e.clientX, e.clientY);
} else {
point = getPoint(0, 0);
} msg += '===========================================================================================<br />';
msg += '页面左上角屏幕坐标:' + firstPoint.x + ', ' + firstPoint.y + '<br />';
if (e) {
msg += '事件屏幕坐标:' + e.screenX + ', ' + e.screenY + '<br />';
msg += '计算屏幕坐标:' + point.x + ', ' + point.y + '<br />';
if (e.screenX == point.x && e.screenY == point.y) {
msg += '相等<br />';
} else {
msg += '不相等<br />';
}
}
div.innerHTML = msg;
} //计算屏幕坐标
function getPoint(clientX, clientY) {
let left = 0;
let top = 0; if (window.outerWidth + 16 == window.innerWidth && window.outerHeight + 16 == window.innerHeight) { //最大化全屏
msg += '最大化全屏状态<br />';
top = (window.outerHeight - window.innerHeight + 8) + window.screenTop + clientY;
left = (window.outerWidth - window.innerWidth + 8) + window.screenLeft + clientX;
} else if (window.outerWidth == window.innerWidth && window.outerHeight == window.innerHeight) { //全屏
msg += '全屏状态<br />';
top = (window.outerHeight - window.innerHeight) + window.screenTop + clientY;
left = (window.outerWidth - window.innerWidth) + window.screenLeft + clientX;
}
else {
if (window.outerWidth == screen.availWidth && window.outerHeight == screen.availHeight) { //最大化
msg += '最大化状态<br />';
top = (window.outerHeight - window.innerHeight) + window.screenTop + clientY;
left = (window.outerWidth - window.innerWidth) + window.screenLeft + clientX;
} else {
msg += '非最大化非全屏状态<br />';
top = (window.outerHeight - window.innerHeight - 8) + window.screenTop + clientY;
left = (window.outerWidth - window.innerWidth - 8) + window.screenLeft + clientX;
}
} return { x: left, y: top };
}
</script> </body> </html>

说明:适用于谷歌浏览器,360浏览器下有BUG,因为360浏览器有状态栏。

思考:获取电脑屏幕坐标的意义是什么?

js将页面上取得的元素坐标转换为电脑屏幕坐标的更多相关文章

  1. Progress.js – 为页面上的任意对象创建进度条效果

    Progress.js 是一个 JavaScript 和 CSS3 的库,它帮助开发人员为网页上的每个对象创建和管理进度条效果.你可以设计自己的模板,进度条或者干脆定制. 您可以使用 Progress ...

  2. 使用js在页面上新建文件夹

    使用js在页面上新建文件夹 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  3. JS 在页面上直接将json数据导出到excel,支持chrome,edge,IE10+,IE9,IE8,Safari,Firefox

    JS 在页面上直接将json数据导出到excel,支持chrome,edge,IE10+,IE9,IE8,Safari,Firefox <html> <head> </h ...

  4. 如何使用 js 检测页面上全局变量

    如何使用 js 检测页面上全局变量 js 检测页面全局变量脚本 <!DOCTYPE html> <html lang="zh-Hans"> <head ...

  5. js禁用页面上右键菜单、选中和复制

    有时候我们不想页面上的内容被人复制走,那么就可以使用js对页面进行设置,禁止右键菜单.禁止选中.禁止复制等功能可以有效的达到这个效果,js代码如下所示: /** * 禁用右键菜单 */ documen ...

  6. 如何用JS获取页面上的所有标签

    最近忙的一匹,忙着大保健,都来不及写博客,今天特意抽出点时间来写一写 前两天看到一个题,是问如何从页面上获取所有的标签的并查看他们的数量,感觉还是有点意思的,所以给大家来搞一下子 我们先来捋捋思路,那 ...

  7. js检查页面上有无重复id的代码分享

    用js代码检查一个页面上是否用重复的id. 方法一: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ...

  8. JS 将页面上的表格导出为 Excel 文件

    如果在页面上展示了一个表格,想把这个表格导出为Excel文件,那么在要求不高的情况下,可以直接利用 JavaScript 的 Blob 和 Object URL 特性将表格导出.不过,这就是利用了 E ...

  9. append、appendTo、prepend、prependTo、before、insertBefore、after、insertAfter、replaceAll方法被调用后,原本在页面上显示的元素会消失

    详细描述: $ele.append..appendTo..prepend..prependTo..before..insertBefore..after..insertAfter..replaceAl ...

  10. js检测页面上一个元素是否已经滚动到了屏幕的可视区域内

    应用场景:只要页面加载了,其中在页面中出现的li就向控制台输出第几个发送请求:在本次加载的页面中,再将滚动条滚回前边的li,不再向控制台输出东西,也就是说已经显示过的li,不再向控制台输出东西. &l ...

随机推荐

  1. L2-036 网红点打卡攻略

    #include <bits/stdc++.h> using namespace std; const int N = 210; int w[N][N]; int main() { int ...

  2. 低代码平台解密:探秘MQTT协议的应用之道

    前言 低代码平台作为当今快速发展的技术之一,为开发人员提供了更高效.更简便的工具和方法,以快速构建和部署应用程序.而MQTT协议作为物联网领域的重要通信协议,在低代码平台上的应用也日益受到关注,今天小 ...

  3. 又一个涵盖前后端+DevOps+OpenAI大模型的高并发项目启动了

    大家好,我是冰河~~ 今天,正式通知大家一件事情:又到了启动新项目的时候,这也是 冰河技术 知识星球继 Seckill秒杀系统 项目后,又一个高并发实战项目.星球其他项目与专栏,大家可移步到冰河的个人 ...

  4. Markdown 跳转到本文章标题

    一.只可以在Markdown文件中跳转 1.因为 Markdown 文件标题就是 Markdown 一种锚点 任何级别的标题可以直接作为锚点目标.如果标题比较固定(不是经常改来改去),可以直接使用标题 ...

  5. springboot下添加日志模块和设置日志文件输出

    前言 日志的使用将通过SLF4J来使用,SLF4J(Simple Logging Facade for Java)是一个为Java应用提供简单日志记录的接口.它的主要目标是在不同的日志系统之间提供一个 ...

  6. 听懂未来:AI语音识别技术的进步与实战

    本文全面探索了语音识别技术,从其历史起源.关键技术发展到广泛的实际应用案例,揭示了这一领域的快速进步和深远影响.文章深入分析了语音识别在日常生活及各行业中的变革作用,展望了其未来发展趋势. 关注Tec ...

  7. Net 高级调试之十四:线程同步的基础知识和常见的同步原语

    一.介绍 今天是<Net 高级调试>的第十四篇文章,这篇文章我们主要介绍和线程相关的内容,当然不是教你如何去写多线程,更不会介绍多线程的使用方法和API,今天,我们主要讲一下锁,一说到多线 ...

  8. bash shell笔记整理——cd命令、目录路径

    cd---change directory 改变目录的意思 语法: cd [选项] <目录> 选项: -L 会自动进入符号连接目录(默认) -P 进入符号连接目录的真实目录下. 常用: 命 ...

  9. libGDX游戏开发之NPC敌人事件(六)

    libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和google找资料,相互学习的可以加我联系方式. ...

  10. Text Intelligence - TextIn.com AI时代下的智能文档识别、处理、转换

    一.智能文档处理介绍 在AI时代,智能文档处理技术正变得越来越重要.它包括了智能文字识别(OCR).智能文档信息抽取.文档图像处理以及文档转换等多个方面.这些技术共同构成了现代信息处理的核心,广泛应用 ...