需求1:鼠标移入正方形的时候,蓝色小圆点跟随鼠标滚动(不许蓝色小圆点超出正方形区域),
正方形里实时显示当前鼠标相对于body的坐标。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="app/src/js/demo.js"></script>
  7. <style>
  8. * {
  9. padding: 0;
  10. margin: 0;
  11. }
  12. #box {
  13. width: 200px;
  14. height: 200px;
  15. border:1px solid #333;
  16. position: relative;
  17. }
  18. #dot {
  19. position: absolute;
  20. left:0;
  21. right:0;
  22. width: 10px;
  23. height: 10px;
  24. -webkit-border-radius: 50%;
  25. -moz-border-radius: 50%;
  26. border-radius: 50%;
  27. background: deepskyblue;
  28. display: inline-block;
  29. }
  30. </style>
  31. </head>
  32. <body>
  33.  
  34. <div id="box">
  35. <span id="point">
  36. (0, 0)
  37. </span>
  38. <span id="dot"></span>
  39. </div>
  40.  
  41. </body>
  42. </html>
  1. // 当需求为获得的坐标值相对于body时
  2.  
  3. function positionBody(event) {
  4. var x, y;
  5. var e = event || window.event;
  6. x = e.clientX;
  7. y = e.clientY;
  8. return {
  9. x: x,
  10. y: y
  11. }
  12. }
  13.  
  14. function executeMove(event, box, point, dot) {
  15. var x = positionBody(event).x;
  16. var y = positionBody(event).y;
  17. // 获取盒子不计算边框的宽高
  18. var boxWidth = box.clientWidth;
  19. var boxHeight = box.clientHeight;
  20. var dotWidth = dot.offsetWidth;
  21. var dotHeight = dot.offsetHeight;
  22.  
  23. // 边界距离
  24. var borderLeft = boxWidth - dotWidth;
  25. var borderTop = boxHeight - dotHeight;
  26.  
  27. if(x >= borderLeft) {
  28. dot.style.left = borderLeft + 'px';
  29. } else if (y >= borderTop) {
  30. dot.style.top = borderTop + 'px';
  31. } else {
  32. dot.style.left = x + 'px';
  33. dot.style.top = y + 'px';
  34. }
  35.  
  36. point.innerHTML = '(' + x + ', ' + y + ')';
  37. }
  38.  
  39. window.onload = function () {
  40. var box = document.getElementById('box');
  41. var point = document.getElementById('point');
  42. var dot = document.getElementById('dot');
  43.  
  44. if(box.attachEvent) {
  45. box.attachEvent('mousemove', function (event) {
  46. executeMove(event, box, point, dot);
  47. });
  48. } else {
  49. box.addEventListener('mousemove', function (event) {
  50. executeMove(event, box, point, dot);
  51. }, false);
  52. }
  53. };

js bin 地址:http://jsbin.com/suvizojube/edit?html,js,output

需求2:鼠标移入正方形的时候,蓝色小圆点跟随鼠标滚动(不许蓝色小圆点超出正方形区域),
正方形里实时显示当前鼠标相对于正方形的坐标(要求正方形在页面里垂直居中)。

元素垂直居中的三种实现方式:
http://www.cnblogs.com/lqcdsns/p/6378536.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="app/src/js/demo.js"></script>
  7. <style>
  8. * {
  9. padding: 0;
  10. margin: 0;
  11. }
  12. html,
  13. body {
  14. height: 100%;
  15. }
  16. #box {
  17. width: 200px;
  18. height: 200px;
  19. border:1px solid #333;
  20. /*脱离文档流*/
  21. position: relative;
  22. left: 0;
  23. right:0;
  24. /*偏移*/
  25. top: 50%;
  26. bottom:0;
  27. /*margin: -100px auto 0 auto;*/
  28. /*-50%代表上移盒子高度的一半*/
  29. -webkit-transform: translateY(-50%);
  30. -moz-transform: translateY(-50%);
  31. -ms-transform: translateY(-50%);
  32. -o-transform: translateY(-50%);
  33. transform: translateY(-50%);
  34. margin: 0 auto;
  35. }
  36. #dot {
  37. position: absolute;
  38. left:0;
  39. right:0;
  40. width: 10px;
  41. height: 10px;
  42. -webkit-border-radius: 50%;
  43. -moz-border-radius: 50%;
  44. border-radius: 50%;
  45. background: deepskyblue;
  46. display: inline-block;
  47. }
  48. </style>
  49. </head>
  50. <body>
  51.  
  52. <div id="box">
  53. <span id="point">
  54. (0, 0)
  55. </span>
  56. <span id="dot"></span>
  57. </div>
  58.  
  59. </body>
  60. </html>
  1. // 当需求为获得的坐标值相对于box时
  2.  
  3. function positionBox(event, box) {
  4. var x, y;
  5. var e = event || window.event;
  6. var boxWidth = box.clientWidth;
  7. var boxHeight = box.clientHeight;
  8. x = e.clientX - box.offsetLeft;
  9. y = e.clientY - (box.offsetTop - box.offsetHeight/2);
  10. return {
  11. x: x,
  12. y: y
  13. }
  14. }
  15.  
  16. function executeMove(event, box, point, dot) {
  17. var x = positionBox(event, box).x;
  18. var y = positionBox(event, box).y;
  19. // 获取盒子不计算边框的宽高
  20. var boxWidth = box.clientWidth;
  21. var boxHeight = box.clientHeight;
  22. var dotWidth = dot.offsetWidth;
  23. var dotHeight = dot.offsetHeight;
  24.  
  25. // 边界距离
  26. var borderLeft = boxWidth - dotWidth;
  27. var borderTop = boxHeight - dotHeight;
  28.  
  29. if(x >= borderLeft) {
  30. dot.style.left = borderLeft + 'px';
  31. } else if (y >= borderTop) {
  32. dot.style.top = borderTop + 'px';
  33. } else {
  34. dot.style.left = x + 'px';
  35. dot.style.top = y + 'px';
  36. }
  37.  
  38. point.innerHTML = '(' + x + ', ' + y + ')';
  39. }
  40.  
  41. window.onload = function () {
  42. var box = document.getElementById('box');
  43. var point = document.getElementById('point');
  44. var dot = document.getElementById('dot');
  45.  
  46. if(box.attachEvent) {
  47. box.attachEvent('mousemove', function (event) {
  48. executeMove(event, box, point, dot);
  49. });
  50. } else {
  51. box.addEventListener('mousemove', function (event) {
  52. executeMove(event, box, point, dot);
  53. }, false);
  54. }
  55. };

js bin: http://jsbin.com/suvizojube/edit?html,js,output

JS监测鼠标指针位置的更多相关文章

  1. js获得鼠标的位置

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. js获取鼠标的位置

    <!doctype html><html><head><meta charset="utf-8"><title>获取鼠标 ...

  3. js获取鼠标坐标位置兼容多个浏览器

    这个是IE 11 下兼容下视图测试时可用. $(window).bind('beforeunload', function (event) { var _this = this; var x = ev ...

  4. js判断鼠标位置是否在某个div中

    div的onmouseout事件让div消失时,会出现这样的情况,就是当鼠标移至div中的其它内容时,此时也判定为离开div,会触发 onmouseout事件,这样div中的内容就不能操作了.解决的办 ...

  5. 前端笔记之JavaScript(十一)event&BOM&鼠标/盒子位置&拖拽/滚轮

    一.事件对象event 1.1 preventdefault()和returnValue阻止默认事件 通知浏览器不要执行与事件关联的默认动作. preventdefault()  支持Chrome等高 ...

  6. js获取鼠标当前的位置

    有时候,我们需要得到窗口拖动或者鼠标移动的距离,此时可以通过计算鼠标前后在页面中的位置来得到想要的结果,下面介绍几个事件属性: 1.客户区坐标位置 鼠标事件都是在浏览器视口中的特定位置上发生的.这个位 ...

  7. 转:JS在文本域鼠标指定位置插入文本-柯乐义

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 原生JS—实现图片循环切换及监测鼠标滚动切换图片

    今天我们主要讲讲如何使用原生JS实现图片的循环切换的方法以及如何检测鼠标滚动循环切换图片.多余的话我们就不多说了,我们一个一个开始讲吧. 1  原生JS实现图片循环切换 -- 方法一 在上栗子之前我们 ...

  9. JS获取鼠标位置,兼容IE FF

    由于Firefox和IE等浏览器之间对js解释的方式不一样,firefox下面获取鼠标位置不能够直接使用clientX来获取.网上说的一般都是触发mousemove事件才行.我这里有两段代码,思路都一 ...

随机推荐

  1. js 冒泡事件与解决冒泡事件

    事件冒泡 :当一个元素接收到事件的时候 会把他接收到的事件传给自己的父级,一直到window . html代码: <div id="div1"> <div id= ...

  2. 解决CentOS查询不到ip

    问题:登陆操作系统,输入ip addr 也可以输入ifconfig查看ip,发现ens33目录中没有inet属性 解答:查看ens33的网卡配置: vi /etc/sysconfig/network- ...

  3. Android中include标签的使用(打开引用布局,隐藏当前布局)

    在开发app的时候,有时候一个布局会反复用到,可以把反复用到的布局单独写一个xml文件,什么时候用到就用includ标签引入xml 下面是我写的反复用到的一个xml,里面有2个button,一个Tex ...

  4. React组件Components的两种表示方式

    函数式的表示: function Welcome(props) { return <h1>Hello, {props.name}</h1>; } Class式的表示: clas ...

  5. oracle数据库修改密码

    忘记了数据库的登录密码,oracle数据库无法登录了. 先删除原先的密码保存文件: del E:\oracle_app\Administrator\product\11.2.0\dbhome_1\da ...

  6. codeforces 1101G (Zero XOR Subset)-less 前缀异或+线性基

    题目传送门 题意:给出一个序列,试将其划分为尽可能多的非空子段,满足每一个元素出现且仅出现在其中一个子段中,且在这些子段中任取若干子段,它们包含的所有数的异或和不能为0. 思路:先处理出前缀异或,这样 ...

  7. 并排的两个div之间会有空隙

    两个并排的DIV会有如下图所示的空隙 是因为 代码中 两个DIV之前有个 ’回车‘ 这么写就OK了 可是为什么会有这种问题呢,是因为浏览器将 空格.回车.tab键等字符都当做一个空格处理,所以当你回车 ...

  8. HDU - 4291 循环节

    还有这种操作? #include<bits/stdc++.h> #define rep(i,j,k) for(register int i=j;i<=k;i++) #define p ...

  9. ssh,hibernate动态映射多表

    [From] http://www.07net01.com/2016/01/1172051.html 最近在做OA系统(ssh),一直在想如何把框架架得更完善,此前已经在框架里集成springMVC, ...

  10. PIE SDK矢量分级渲染

    1. 功能简介 分级渲染是矢量的一种数据表达方式.通过选取一个字段,并根据实际需要对字段的数据进行分级,并对每一级设置不同的符号,已达到区分显示的效果. 2. 功能实现说明 2.1. 实现思路及原理说 ...