代码:

<!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. MySQL锁粒度是什么意思?MySQL锁粒度是什么?

    MySQL锁粒度就是我们通常所说的锁级别.数据库引擎具有多粒度锁定,允许一个事务锁定不同类型的资源. MySQL数据库有三种锁的级别,分别是:页级锁.表级锁 .行级锁. 锁粒度 锁粒度就是我们通常所说 ...

  2. 一篇文章带你掌握Web自动化测试工具——Selenium

    一篇文章带你掌握Web自动化测试工具--Selenium 在这篇文章中我们将会介绍Web自动化测试工具Selenium 如果我们需要学习相关内容,我们需要掌握Python,PyTest以及部分前端知识 ...

  3. JavaWeb项目练习(学生选课管理系统)二【新建数据库】

    思路 1.页面美化css这部分,挖个坑,我打算做好一点所以先空着.× 2.需要做四个数据表(学生.教师.管理员.课程) 关联: 学生有个人课表 教师有教授课程和个人课表 管理员有全部权限(关联所有数据 ...

  4. ClickHouse(16)ClickHouse日志引擎Log详细解析

    日志引擎系列 这些引擎是为了需要写入许多小数据量(少于一百万行)的表的场景而开发的. 这系列的引擎有: StripeLog Log TinyLog 共同属性 引擎: 数据存储在磁盘上. 写入时将数据追 ...

  5. Flink State 状态原理解析

    一.Flink State 概念 State 用于记录 Flink 应用在运行过程中,算子的中间计算结果或者元数据信息.运行中的 Flink 应用如果需要上次计算结果进行处理的,则需要使用状态存储中间 ...

  6. v-for和指令

    . v-for 起遍历作用. 注意点: 1.遍历的里面第一个值是定义的元素的值,第二个值是值的名称,第三个值为下标 2.:key是v-blind:key的简写,是代码中的唯一标识,一般用id来定义 v ...

  7. MySQL日期时间加|减法

    日期加法 select date_add(curdate(), interval N SECOND); -- 加N秒 select date_add(curdate(), interval N MIN ...

  8. 7、If分支语句

    1.程序的流程结构 程序的流程控制结构一共有三种: 顺序结构 选择结构 循环结构. 顺序结构: 从上向下 逐行执行 选择结构:条件满足,某些代码才会执行.0-1次 分支语句: if,switch,se ...

  9. Ruby 版本升级

    一.升级原因 在开发shopify app的时候,提示我当前的Ruby版本不支持(如下图),所以需要升级Ruby. 由于Ruby 中的一些 Gem 依赖于 OpenSSL 库,所以更改 Ruby 版本 ...

  10. Linux的文件系统,根目录rootfs结构

    文件系统fs 文件系统时操作系统用来管理文件的.fs=filesystem... 在linux中,一切皆为文件,这句话够经典了吧... linux中每个分区都是一个fs. FHS Linux下的Fil ...