//本来要给火狐提交bug的,发现复现不鸟,我勒个去 <!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> </head> <style> html,body{ 100%; height:100%; } body{ position:relative } section{ position:absolute } .s1{ left:10px; } .s2{ left:40px; } .s3{ left:80px } input{ display:none; outline:none } </style> <body> <section class="s1"> 11 </section> <section class="s2"> 11 </section> <section class="s3"> 11 </section> <input type="text"> <script> var Drag = function( e ){ this.e = typeof e === "string" ? document.getElementById(e) : e; this.initDrag(); } Drag.prototype = { zIndex : 0, constructor : Drag, initDrag : function(){ this.e.addEventListener("mousedown",this.ev.bind(this)); }, ev : function(e){ switch(e.type){ case "mousedown": this.dx = e.clientX - this.e.offsetLeft; this.dy = e.clientY - this.e.offsetTop; this.e.zIndex = this.zIndex++; this.fn = this.ev.bind(this); document.addEventListener("mousemove",this.fn); document.addEventListener("mouseup",this.fn); break; case "mousemove": this.e.style.left = e.clientX - this.dx + "px"; this.e.style.top = e.clientY - this.dy + "px"; break; case "mouseup": document.removeEventListener("mouseup",this.fn) document.removeEventListener("mousemove",this.fn) break; }; e.cancelBubble = true; e.defaultPrevented = true; e.stopPropagation(); e.preventDefault(); return } }; Array.prototype.slice.call(document.querySelectorAll("section"),null).forEach(function(e,i){ new Drag(e); e.addEventListener("mouseup",function(){ var css = Object.create( window.getComputedStyle(e,null) ), t = parseInt(css.top) + "px", l = parseInt(css.left) + "px"; /************************************/ e.style.left = 0; e.style.top = 0; /************************************/ console.log( window.getComputedStyle(e,null).left ) console.log( window.getComputedStyle(e,null).top ) e.style.left = l e.style.top = t }); }); </script> </body> </html>