2011-10-01 52 views

回答

0

一般的處理方法是這樣的東西:

  • 當onmousedown事件在調整大小的目標大火,開始跟蹤的OnMouseMove
  • 當的OnMouseMove火災,調整元件
  • 當onmouseup火災,清除的OnMouseMove處理程序

所以基本上你只是迴應事件,沒有while循環或任何涉及。

完成它可能有點棘手,所以我會建議看看是否有JS庫可以使用。一個非常簡單的方式來獲得這種行爲是使用jQuery UI's resizable component

+0

感謝您的建議。 – Ethan722

+0

我想知道,如果我使用onmousedown,然後與jQuery一起移動,所以我可以選擇一個處理多個元素的特定類,但是一次只能處理該類中的一個元素,這仍然可行嗎? – Ethan722

+0

如果你的意思是事件代表團,那麼是的,我認爲它應該工作 –

3

在這裏你去人:

http://jsfiddle.net/d9hsG/

function c(a){console.log(a)} 
function coords(el){ 
    var curleft, curtop; 
    curleft=curtop=0; 
    do{ 
     curleft+=el.offsetLeft; 
     curtop+=el.offsetTop; 
    } while(el=el.offsetParent); 
    return [curleft,curtop]; 
} 
Resizer = { 
    attach: function(el,minh,minw){ 
     var rs=el.resizer=el.getElementsByClassName('drag')[0]; 
     rs.resizeParent=el; 
     if(minh==undefined){ 
      el.minh=rs.offsetHeight*2; 
     } 
     if(minw==undefined){ 
      el.minw=rs.offsetWidth*2; 
     } 
     rs.onmousedown = Resizer.begin; 


    }, 
    begin: function(e){ 
     var el=Resizer.el=this.resizeParent; 
     var e=e||window.event; 
     this.lastx=e.clientX; 
     this.lasty=e.clientY; 
     document.onmousemove=Resizer.resize; 
     document.onmouseup=Resizer.end; 
     return false; 


    }, 
    resize: function(e){ 
     var e = e || window.event; 
     var x,y,mx,my,el,rs,neww,newh; 
     el=Resizer.el; 
     rs=el.resizer; 
     mx=e.clientX; 
     my=e.clientY; 
     neww=(el.clientWidth-(rs.lastx-mx)); 
     newh=(el.clientHeight-(rs.lasty-my)); 
     if(neww>=el.minw){  
      el.style.width=neww+'px'; 
      rs.lastx=mx; 
     } 
     else{ 
      rs.lastx-=parseInt(el.style.width)-el.minw; 
      el.style.width=el.minw+'px'; 

     } 
     if(newh>=el.minh){ 
      el.style.height=newh+'px'; 
      rs.lasty=my; 
     } 
     else{ 
      rs.lasty-=parseInt(el.style.height)-el.minh; 
      el.style.height=el.minh+'px'; 

     } 

     return false; 


    }, 
    end: function(){ 
     document.onmouseup=null; 
     document.onmousemove=null; 
    } 
}; 
window.onload=function(){ 
    Resizer.attach(document.getElementsByClassName('resize')[0]); 
} 

你的HTML需要的樣子:

<div class="resize">< 
    div class="drag"></div> 
</div> 

無論一個需要成爲div,但可調整大小的類需要「調整大小」,可拖動元素的類需要「拖動」。

Resizer.attach(element); 

...其中元素將被調整的一個:

與安裝它。

適用於多個元素,如jsfiddle所示。您還可以傳入最小高度和最小寬度。如果你不這樣做,它會自動使它們成爲可拖動元素高度的兩倍。

目前確實有一個問題,當你滾動一路下來。我不確定如何反擊它,但我會在更晚的時候處理它。

+0

我認爲你很好地回答了你的回答,但是我正在尋找一種更簡單的方法,所以我發現的最好的方法是使用resize:CSS聲明或者使用前面的評論者說的onmousedown和onmousemove。 – Ethan722

相關問題