1111.html 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <style>
  8. .calculator {
  9. position: absolute; /*设置绝对定位,脱离文档流,便于拖拽*/
  10. display: block;
  11. width: 218px;
  12. height: 280px;
  13. cursor: move; /*鼠标呈拖拽状*/
  14. }
  15. </style>
  16. <body>
  17. <div class="calculator" id="drag">**********</div>
  18. </body>
  19. <script>
  20. window.onload = function() {
  21. //拖拽功能(主要是触发三个事件:onmousedown\onmousemove\onmouseup)
  22. var drag = document.getElementById('drag');
  23. //点击某物体时,用drag对象即可,move和up是全局区域,也就是整个文档通用,应该使用document对象而不是drag对象(否则,采用drag对象时物体只能往右方或下方移动)
  24. drag.onmousedown = function(e) {
  25. var e = e || window.event; //兼容ie浏览器
  26. var diffX = e.clientX - drag.offsetLeft; //鼠标点击物体那一刻相对于物体左侧边框的距离=点击时的位置相对于浏览器最左边的距离-物体左边框相对于浏览器最左边的距离
  27. var diffY = e.clientY - drag.offsetTop;
  28. /*低版本ie bug:物体被拖出浏览器可是窗口外部时,还会出现滚动条,
  29. 解决方法是采用ie浏览器独有的2个方法setCapture()\releaseCapture(),这两个方法,
  30. 可以让鼠标滑动到浏览器外部也可以捕获到事件,而我们的bug就是当鼠标移出浏览器的时候,
  31. 限制超过的功能就失效了。用这个方法,即可解决这个问题。注:这两个方法用于onmousedown和onmouseup中*/
  32. if(typeof drag.setCapture!='undefined'){
  33. drag.setCapture();
  34. }
  35. document.onmousemove = function(e) {
  36. var e = e || window.event; //兼容ie浏览器
  37. var left=e.clientX-diffX;
  38. var top=e.clientY-diffY;
  39. //控制拖拽物体的范围只能在浏览器视窗内,不允许出现滚动条
  40. if(left<0){
  41. left=0;
  42. }else if(left >window.innerWidth-drag.offsetWidth){
  43. left = window.innerWidth-drag.offsetWidth;
  44. }
  45. if(top<0){
  46. top=0;
  47. }else if(top >window.innerHeight-drag.offsetHeight){
  48. top = window.innerHeight-drag.offsetHeight;
  49. }
  50. //移动时重新得到物体的距离,解决拖动时出现晃动的现象
  51. drag.style.left = left+ 'px';
  52. drag.style.top = top + 'px';
  53. };
  54. document.onmouseup = function(e) { //当鼠标弹起来的时候不再移动
  55. this.onmousemove = null;
  56. this.onmouseup = null; //预防鼠标弹起来后还会循环(即预防鼠标放上去的时候还会移动)
  57. //修复低版本ie bug
  58. if(typeof drag.releaseCapture!='undefined'){
  59. drag.releaseCapture();
  60. }
  61. };
  62. };
  63. };
  64. </script>
  65. </html>