用 javascript 获取当页面上鼠标(光标)位置在许多情况下都会用到,比如拖放,悬停提示(tooltip) 等等。当然,这里我们依然要面对浏览器的兼容问题,在不同的浏览器下,对这些相关的属性处理方式也不同,本文详细介绍了浏览器在处理这些属性时的差异和最终的解决方法。

用 javascript 获取当页面上鼠标(光标)位置 – 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script type="text/javascript">
  
// 说明:获取鼠标位置
// 整理:http://www.codebit.cn
// 来源:http://www.webreference.com
  
function mousePosition(ev){
    if(ev.pageX || ev.pageY){
        return {x:ev.pageX, y:ev.pageY};
    }
    return {
        x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
        y:ev.clientY + document.body.scrollTop  - document.body.clientTop
    };
}
  
</script>

上面的代码我们在 怎么用 javascript 实现拖拽 中已经介绍过了,由于这个需求我们经常用到,所以我们将这段代码独立成一篇文章,供新手查询。

使用方式:

 document.onmousemove = mouseMove;function mouseMove(ev){ev = ev || window.event;var mousePos = mousePosition(ev);
}

关于代码的详细说明,原文中已经介绍,现转到此处:

我们首先要声明一个 evnet 对象,无论移动、点击、按键等,都会激活一个 evnet ,在 Internet Explorer 里, event 是全局变量,会被存储在 window.event 里. 在 firefox 或者其他浏览器,event 会被相应的函数获取.当我们将mouseMove函数赋值于document.onmousemove,mouseMove 会获取鼠标移动事件。

为了让 ev 在所有浏览器下获取了 event 事件,在Firefox下"||window.event"将不起作用,因为ev已经有了赋值。在 MSIE 中 ev 为空,所以得到 window.event 。

因为在这篇文章中我们需要多次获取鼠标位置,所以我们设计了一个 mousePosition 函数,它包含一个参数 : event 。

因为我们要在 MSIE 和其他浏览器下运行,Firefox 和其他浏览器用 event.pageX 和 event.pageY 来表示鼠标相对于文档的位置,如果你有一个 500*500 的窗口并且你的鼠标在绝对中间,那么 pageX 和 pageY 的值都是 250,如果你向下滚动 500, 那么 pageY 将变成 750。

MSIE 正好相反,它使用 event.clientX 和 event.clientY 表示鼠标相当于窗口的位置,而不是文档。在同样的例子中,如果你向下滚动500,clientY 依然是 250,因此,我们需要添加 scrollLeft 和 scrollTop 这两个相对于文档的属性。最后,MSIE 中文档并不是从 0,0 开始,而是通常有一个小的边框(通常是 2 象素),边框的大小定义在 document.body.clientLeft 和 clientTop 中,我们也把这些加进去。

很幸运,我们现在已经用 mousePosition 函数解决了坐标问题,不需为此费心了。

鼠标悬停在某对象上,在鼠标位置显示层,移开后隐藏层

2011 年 08 月 24 日 | Author YaoYan

最近做一个项目,每组数据的条目比较多,在浏览页面,不能把所有的信息都显示出来,就想做一个层,让它默认隐藏,在鼠标划过条目标题的时候,显示更多的内容,鼠标移走后,隐藏。

这就用到了javascript的onmouseover,和onmouseout事件。

这两个函数如下:

   1:  //鼠标悬停,显示层
   2:  function  show(ev,id){
   3:      var tag='divshowtext'+id;
   4:      var divshow=document.getElementById(tag);  
   5:      var mp = getMouseLocation();
   6:      var x=mp.x;
   7:      var y=mp.y;
   8:      x=x+20;//曾显示位置相对于鼠标当前位置的偏移量
   9:      y=y+20;//曾显示位置相对于鼠标当前位置的偏移量
  10:      divshow.style.left=x+"px";
  11:      divshow.style.top=y+"px";
  12:      divshow.style.visibility= "visible"; 
  13:  };
  14:  //鼠标滑出,隐藏层
  15:  function  hide(id){
  16:      var tag='divshowtext'+id;
  17:      var divshow=document.getElementById(tag);
  18:      divshow.style.visibility= "hidden"; 
  19:  };

其中第4行的getMouseLocation()函数,见上一篇

兼容Firefox和IE的,获取鼠标当前位置的javascript函数

在显示条目的主循环中,调用:

<a href="<?php echo $url;?>" target="_self"  οnmοuseοver="show(event,<?php echo $id; ?>)" οnmοuseοut="hide(<?php echo $id; ?>)">

同时在条目显示主循环里,还要显示相对应的<div>层:

<div class="divshow_text" id="divshowtext&lt;?php echo $id; ?>" >
发布于:<?php echo $time;?><br><br>
……<!-- 其他任何需要在隐藏层里显示的内容 -->
</div>

层的CSS样式里,主要的就是要设置为默认隐藏,定位“absolute”,其他的根据需要设置:

.divshow_text

{

background-color:#FFC;

font-size:12px;

visibility:hidden;

z-index:9999;

position:absolute;

padding:5px;

text-align:left;

word-wrap:break-word;

border: 1px solid #FCF;

}

JS鼠标捕获DIV内选中的坐标和宽高相关推荐

  1. 为什么有些内联(行内)元素可以设置宽高?

    为什么有些内联(行内)元素如img.input可以设置宽高? 在说明之前我们先来了解一些定义. 块级元素和内联元素: ①块级元素总是独占一行,表现为另起一行开始,而且其后的元素也必须另起一行显示. 宽 ...

  2. 5分钟学会js上传图片校验图片格式、大小、尺寸宽高

    js上传图片校验图片格式.大小.尺寸宽高 一.前言        js上传图片校验图片格式.大小.尺寸宽高.        在此记录下,分享给大家. 二.代码 <input type=" ...

  3. js判断当前设备和获取设备、浏览器宽高

    /*** 判断当前设备* @returns*/ function currDevice(){//设备信息var u = navigator.userAgent;// appVersion 可返回浏览器 ...

  4. JS鼠标点击自动选中点击元素中的文字

    目录 1. 选中输入框(input.textarea等)中的文字 2.普通标签(div.p.span等) 1. 选中输入框(input.textarea等)中的文字 <form action=& ...

  5. vue.js 获取当前屏幕的宽度_vue 获取屏幕宽高 width height

    AngularJs 入门系列-2 表单验证 对于日常的开发来说,最常见的开发场景就是通过表单编辑数据,这里涉及的问题就是验证问题. angularjs 内置已经支持了常见的验证方式,可以轻松实现表单验 ...

  6. 行内元素和块级元素的区别,为何img、input等行内元素可以设置宽高??(夯实基础)

    我们习惯将html中元素分类为行内元素和块级元素,如下: ·常见块级元素有:html.body.div.header.footer.nav.section.aside.article.p.hr.h1~ ...

  7. 如何通过JS获取元素宽高

    方法一:DOM节点.offsetWidth/offsetHeight 作用:获取到的是内容区域(content) + 内边距(padding) + 边框(border)的值,输出一个数字. <s ...

  8. 如何给行内元素设置宽高

    我们都知道行内元素直接设置宽高是无效的.当我们在面试中遇到这个问题的时候,很容易想到给它设置 display:block或者display:inline-block就可以了,但是面试官来了句" ...

  9. 设置行内元素宽高和背景色后,行内元素文本不水平垂直居中解决方案

    前言 行内元素:指在同一行内不自动换行,可以和其他行内元素在同一水平的元素,不可以设置宽高. 行内元素设置宽高:行内元素想要设置宽高,需要用display:inline-block设置(详解如下表). ...

  10. css 宽高自适应的div 元素 如何居中 垂直居中

    在我们 编写css 样式的时候经常会遇见一个问题 那就是一个 宽高未知的元素 要让他 垂直居中如何实现这个呢 下面是我常用的两种方法 上代码 下面的是 结构代码 <div class=" ...

最新文章

  1. NLP 领域还有 5 大开放问题
  2. 特斯拉 model3 没有信号_Model 3在北京失控撞人,特斯拉:未发现任何系统故障
  3. 选择排序之——简单选择排序(c/c++)
  4. springBoot单元测试-模拟MVC测试
  5. LINQ之路 2:C# 3.0的语言功能(上)
  6. 标准C++类std::string的内存共享和Copy-On-Write(写时拷贝)
  7. linus下centos7防火墙设置
  8. mysql两种引擎的适用场景_MySQL两种引擎的区别和应用场景
  9. SQL事务处理实验报告
  10. Eclipse启动莫名报错处理
  11. C++ 常用代码大全
  12. dotween的数值变化_Unity-Dotween
  13. 二值图像数字水印技术的实现
  14. 接口:基于FPGA的HDMI接口设计
  15. 新手小白,做二次剪辑的必备工具,帮你快人一步
  16. python-docx文档高亮显示
  17. csr867x入门之串口AT指令协议(三)
  18. Linux ● 文件操作指令
  19. 高权重网站站长之家,站长专栏申请暂时关闭了!
  20. 博睿孟曦东:致力于提升企业关键业务可靠性与稳定性使其IT质量可视化

热门文章

  1. C# WinForm窗体上的按钮结束回车确认
  2. spring 中发邮件的设置
  3. Navicat操作SQL server 2008R2文件.bak文件还原
  4. BZOJ1486: [HNOI2009]最小圈
  5. 设计模式 笔记 享元模式 Flyweight
  6. Unix/Linux环境C编程入门教程(20) 搭建基于Mac的 Xcode 与 QT 开发环境
  7. uCOS-II 学习笔记之任务管理--------任务控制块OS_TCB
  8. hdu 1007 Quoit Design(最近点对)
  9. [导入]你的网站被订阅了吗(浅谈RSS2.0)续
  10. 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员……