鼠标行为->坐标系

    1. clientX/Y:鼠标相对浏览器可视区域的坐标。不包含滚动条
    2. layerX/Y 同pageX/Y相同 IE11以下和clientX/Y相同
    3. screenX/Y 鼠标相对于屏幕的坐标
    4. x/y 和clientX/Y相同。火狐不支持。鼠标位置相对于当前可视区域的坐标。不包含滚动条。
    5. pageX/pageY 鼠标相对于文档的坐标,包括滚动条的距离。IE9以下不支持
    6. offsetX/Y 鼠标相对于块元素的坐标 包含边框 safari 不包含边框。

    封装

    1. 鼠标在文档中的位置。 ```javascript /**
      • 获取鼠标在文档中的位置
      • 相对于客户端的距离+滚动的距离-文档偏移量
      • @param {Event 对象} e
      • @returns 鼠标在文档中的位置 */ function pagePos(e) { var e = e || window.event, sLeft = getScrollOffset().x,//滚动条横轴滚动距离 sTop = getScrollOffset().y,//滚动条纵轴滚动距离 clientX = e.clientX,//相对于浏览器可视窗口的横轴距离 clientY = e.clientY,//相对于浏览器可视窗口的纵轴距离 cLeft = document.documentElement.clientLeft || 0,//文档偏移量 cTop = document.documentElement.clientTop || 0//文档偏移量 return { x: clientX + sLeft - cLeft, y: clientY + sTop - cTop } }
    1. 拖拽<br /> mousedown + mousemove +mouseup = drag;<br />封装
    2. ```javascript
    3. /**
    4. *
    5. * @param {Event } e
    6. * 阻止事件冒泡
    7. */
    8. function cancelBubble(e) {
    9. var e = e || window.e;
    10. if (e.stopPropagation) {
    11. e.stopPropagation();
    12. } else {
    13. e.cancelBubble = true;
    14. }
    15. }
    16. /**
    17. *
    18. * @param {Event} e
    19. * 阻止默认事件
    20. */
    21. function preventDefault(e) {
    22. var e = e || window.event;
    23. if (e.preventDefault) {
    24. e.preventDefault();
    25. } else {
    26. e.returnValue = false;
    27. }
    28. }
    1. /**
    2. * 拖拽事件简单封装
    3. * @param {Element 元素} elem
    4. */
    5. function dragEvent(elem) {
    6. var x,
    7. y,
    8. //元素宽度
    9. eleWidth = parseInt(getStyle(elem, 'width')),
    10. //元素高度
    11. eleHeight = parseInt(getStyle(elem, 'height')),
    12. // 文档宽高对象
    13. doc = getDocHeight();
    14. // 添加鼠标按下事件。
    15. addEvent(elem,'mousedown',function (e) {
    16. var e = e || window.event,
    17. //元素初始位置的left
    18. eleOrignLeft = parseInt(getStyle(elem, 'left')),
    19. //元素初始位置的top
    20. eleOriginTop = parseInt(getStyle(elem, 'top'));
    21. // 鼠标位置相对elem 左上角x的距离
    22. x = mousePos(e).x - eleOrignLeft;
    23. // 鼠标位置相对elem 左上角y的距离
    24. y = mousePos(e).y - eleOriginTop;
    25. // 添加鼠标移动事件
    26. addEvent(document, 'mousemove', mouseMove);
    27. // 添加鼠标抬起事件
    28. addEvent(document, 'mouseup', mouseUp);
    29. // 阻止事件冒泡
    30. cancelBubble(e);
    31. // 阻止事件默认事件
    32. preventDefault(e);
    33. })
    34. function mouseMove(e) {
    35. var e = e || window.e,
    36. //鼠标点击的位置
    37. evPos = mousePos(e),
    38. // 鼠标相对于文档的位置 - 鼠标相对于元素左上角的位置
    39. eleLeft = evPos.x - x,
    40. eleTop = evPos.y - y;
    41. if (eleLeft <= 0) {
    42. eleLeft = 0;
    43. } else if (eleLeft >= (doc.width - eleWidth)) {
    44. //右边的距离超出了文档宽度减去 元素宽度
    45. eleLeft = doc.width - eleWidth;
    46. }
    47. if (eleTop <= 0) {
    48. eleTop = 0;
    49. } else if (eleTop >= (doc.height - eleHeight)) {
    50. //高度超出了文档高度减去 元素高度
    51. eleTop = doc.height - eleHeight;
    52. }
    53. elem.style.left = eleLeft+ 'px';
    54. elem.style.top = eleTop + 'px';
    55. }
    56. function mouseUp(e) {
    57. removeEvent(document, 'mouseup', mouseUp);
    58. removeEvent(document, 'mousemove', mouseMove);
    59. }
    60. }