鼠标行为

  1. // 鼠标行为->坐标系
  2. // clientX/Y 鼠标位置相当于当前可视区域的坐标(不包括滚动条的滚动距离)
  3. // layerX/Y 同pageX/pageY一样 ie浏览器支持性不好
  4. // x/y 同clientX/Y一样,火狐浏览器老版不支持
  5. // pageX/pageY 鼠标位置相对于当前文档的坐标(包含滚动条滚动的距离)ie9一下不支持
  6. // screenX/Y 鼠标位置相对于屏幕的坐标
  7. // offsetX/offsetY 鼠标位置相对于块元素的位置 包含边框 safari不包括边框
  8. document.onclick=function(){
  9. var e=e||window.event;
  10. }

封装pageX/pageY

  1. function getScrollOffset() {
  2. if(window.pageXOffset){
  3. return {
  4. left: window.pageXOffset,
  5. top: window.pageYOffset
  6. }
  7. }else{
  8. return {
  9. left: document.body.scrollLeft+document.documentElement.scrollLeft,
  10. top: document.body.scrollTop+document.documentElement.scrollTop,
  11. }
  12. }
  13. }
  14. function pagePos(e){
  15. var sLeft=getScrollOffset().left,
  16. sTop=getScrollOffset().top,
  17. cLeft=docuemnt.documentElement.clientLeft||0;
  18. cTop=docuemnt.docuemntElement.clientTop||0;
  19. return {
  20. X: e.clientX+sLeft-cLeft,
  21. Y: e.clientY+sTop-cTop;
  22. }
  23. }

拖拽

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style type='text/css'>
  9. .box {
  10. position: absolute;
  11. width: 100px;
  12. height: 100px;
  13. background-color: pink;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18. <br/>
  19. <div class='box'></div>
  20. </body>
  21. <script>
  22. // 鼠标行为->坐标系
  23. // clientX/Y 鼠标位置相当于当前可视区域的坐标(不包括滚动条的滚动距离)
  24. // layerX/Y 同pageX/pageY一样 ie浏览器支持性不好
  25. // x/y 同clientX/Y一样,火狐浏览器老版不支持
  26. // pageX/pageY 鼠标位置相对于当前文档的坐标(包含滚动条滚动的距离)ie9一下不支持
  27. // screenX/Y 鼠标位置相对于屏幕的坐标
  28. // offsetX/offsetY 鼠标位置相对于块元素的位置 包含边框 safari不包括边框
  29. // document.onclick=function(){
  30. // var e=e||window.event;
  31. // }
  32. function getScrollOffset() {
  33. if(window.pageXOffset){
  34. return {
  35. left: window.pageXOffset,
  36. top: window.pageYOffset
  37. }
  38. }else{
  39. return {
  40. left: document.body.scrollLeft+document.documentElement.scrollLeft,
  41. top: document.body.scrollTop+document.documentElement.scrollTop,
  42. }
  43. }
  44. }
  45. function pagePos(e){
  46. var sLeft=getScrollOffset().left,
  47. sTop=getScrollOffset().top,
  48. cLeft=document.documentElement.clientLeft||0;
  49. cTop=document.documentElement.clientTop||0;
  50. return {
  51. X: e.clientX+sLeft-cLeft,
  52. Y: e.clientY+sTop-cTop
  53. }
  54. }
  55. function getStyles(elem,prop){
  56. if(window.getComputedStyle){
  57. if(prop){
  58. return parseInt(window.getComputedStyle(elem,null)[prop]);
  59. }else{
  60. return window.getComputedStyle(elem,null);
  61. }
  62. }else{
  63. if(prop){
  64. return parseInt(elem.currentStyle[prop]);
  65. }else{
  66. return elem.currentStyle;
  67. }
  68. }
  69. }
  70. var oBox=document.getElementsByClassName('box')[0];
  71. oBox.onmousedown=function(e){
  72. var x=pagePos(e).X-getStyles(oBox,'left');
  73. var y=pagePos(e).Y-getStyles(oBox,'top');
  74. console.log('pageX,pageY',x,y)
  75. console.log('offsetX,offsetY',e.offsetX,e.offsetY)
  76. document.onmousemove=function() {
  77. var e=e||window.event,
  78. page=pagePos(e);
  79. oBox.style.left=page.X-x+'px';
  80. oBox.style.top=page.Y-y+'px';
  81. }
  82. document.onmouseup=function(e){
  83. document.onmousemove=null;
  84. document.onmouseup=null;
  85. }
  86. }
  87. </script>
  88. </html>

封装拖拽方法

  1. elemDrag(oBox)
  2. function addEvent(el,type,fn){
  3. if(el.addEventListener){
  4. el.addEventListener(type,fn,false);
  5. }else if(el.attachEvent){
  6. el.attachEvent('on'+type,function(){
  7. fn.call(el);
  8. })
  9. }else{
  10. el['on'+type]=fn;
  11. }
  12. }
  13. function elemDrag(elem) {
  14. var x,y;
  15. addEvent(elem,'mousedown',function(e){
  16. var e=e||window.event;
  17. x=pagePos(e).X-getStyles(elem,'left');
  18. y=pagePos(e).Y-getStyles(elem,'top');
  19. addEvent(document,'mousemove',mouseMove);
  20. addEvent(document,'mouseup',mouseUp);
  21. // cancelBubble(e); 未完成
  22. // preventDefaultEvent(e);
  23. })
  24. function mouseMove(e) {
  25. var e=e||window.event;
  26. elem.style.top=pagePos(e).Y-y+'px';
  27. elem.style.left=pagePos(e).X-x+'px';
  28. }
  29. function mouseUp(e) {
  30. var e=e||window.event;
  31. // removeEvent(document,'mousemove',mouseMove);
  32. // removeEvent(document,'mouseUp',mouseUp);
  33. document.removeEventListener('mousemove',mouseMove,false);
  34. document.removeEventListener('mouseup',mouseUp,false);
  35. }
  36. }