전체 코드를 캡슐화하는 것을 고려하지 않는다면 약 5분 안에 비슷한 효과를 작성할 수 있습니다. 전체 코드를 객체로 캡슐화하기 위해 Pro Javascript Techniques 책에 있는 예제의 스타일을 살짝 빌려왔습니다. Pro Javascript Techniques 책에서 권장되는 드래그 앤 드롭 예: http://boring.youngpup.net/2001/domdrag 렉트 삭제 기능을 테스트하는 데 사용되는 페인팅 효과를 끄는 버튼을 추가합니다. [Ctrl A 모두 선택 참고: 외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다 var Rect = { //当前正在画的矩形对象 obj: null, //画布 container: null, //初始化函数 init: function(containerId){ Rect.container = document.getElementById(containerId); if(Rect.container){ //鼠标按下时开始画 Rect.container.onmousedown = Rect.start; } else{ alert('You should specify a valid container!'); } }, start: function(e){ var o = Rect.obj = document.createElement('div'); o.style.position = "absolute"; // mouseBeginX,mouseBeginY是辅助变量,记录下鼠标按下时的位置 o.style.left = o.mouseBeginX = Rect.getEvent(e).x; o.style.top = o.mouseBeginY = Rect.getEvent(e).y; o.style.height = 0; o.style.width = 0; o.style.border = "dotted black 1px"; //向o添加一个叉叉,点击叉叉可以删除这个矩形 var deleteLink = document.createElement('a'); deleteLink.href="#"; deleteLink.onclick = function(){ Rect.container.removeChild(this.parentNode); //this.parentNode.style.display = "none"; //alert(this.tagName); } deleteLink.innerText = "x"; o.appendChild(deleteLink); //把当前画出的对象加入到画布中 Rect.container.appendChild(o); //处理onmousemove事件 Rect.container.onmousemove = Rect.move; //处理onmouseup事件 Rect.container.onmouseup = Rect.end; }, move: function(e){ var o = Rect.obj; //dx,dy是鼠标移动的距离 var dx = Rect.getEvent(e).x - o.mouseBeginX; var dy = Rect.getEvent(e).y - o.mouseBeginY; //如果dx,dy <0,说明鼠标朝左上角移动,需要做特别的处理 if(dx<0){ o.style.left = Rect.getEvent(e).x; } if(dy<0){ o.style.top = Rect.getEvent(e).y; } o.style.height = Math.abs(dy); o.style.width = Math.abs(dx); }, end: function(e){ //onmouseup时释放onmousemove,onmouseup事件句柄 Rect.container.onmousemove = null; Rect.container.onmouseup = null; Rect.obj = null; }, //辅助方法,处理IE和FF不同的事件模型 getEvent: function(e){ if (typeof e == 'undefined'){ e = window.event; } //alert(e.x?e.x : e.layerX); if(typeof e.x == 'undefined'){ e.x = e.layerX; } if(typeof e.y == 'undefined'){ e.y = e.layerY; } return e; } }; ] //测试代码开始 //初始化 Rect.init("main"); document.getElementById('t').onclick = function(){ Rect.container.onmousedown = null; };