以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 SVG/GML/VRML/X3D/XAML 』  (http://bbs.xml.org.cn/list.asp?boardid=21)
----  SVG: 如何用javascript處理移動多個不定數目的圖形?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=21&rootid=&id=79683)


--  作者:huajen_chen
--  发布时间:1/26/2010 6:02:00 PM

--  SVG: 如何用javascript處理移動多個不定數目的圖形?
您好,
   移動固定數量的圖形時我是以addEventListener來完成圖形拖曳的動作(有幾個圖形就寫幾遍).  但是如果現在一開始我不會知道有多少個圖形是可以拖曳的(可能1-500), 圖形個數會在與使用者互動的過程一直增加(add功能)或減少(remove功能), 請問我該如何處理這樣的需求?
   例如有一個畫布一開始是空的, 使用者可以按add鍵加一個圖形(例如圓形)到畫布上, 一旦加到畫布上就必須可以在畫布上被拖曳; 當然畫布上的圖形也要可以隨著被滑鼠點選後被移除.

  請您幫幫忙, 謝謝!!


--  作者:gj1989816
--  发布时间:1/27/2010 9:38:00 AM

--  
使用 g 元素 来包住所以的元素,在 transform   g元素
--  作者:huajen_chen
--  发布时间:1/27/2010 11:50:00 AM

--  
樓上的朋友,
   能不能麻煩你說清楚點...?  不是要單純的移動, 是要以滑鼠拖曳. 以下是我的做法.
<g id="g01" transform="scale(1.0)">
<rect id="rect001" x="100" y="100" width="0.1cm" height="1cm" fill="white" stroke="blue" stroke-width="1"/>
<rect id="rect002" x="100" y="200" width="0.1mm" height="1cm" fill="white" stroke="blue" stroke-width="1"/>
</g>
...
rectangle001 = document.getElementById('rect001');
rectangle002 = document.getElementById('rect002');
rectangle001.addEventListener("mousedown", mousedown_listener001, false);
rectangle002.addEventListener("mousedown", mousedown_listener002, false);
function mousedown_listener001(evt)
{
    dx001 = rectangle001.x.baseVal.value - evt.clientX;
    dy001 = rectangle001.y.baseVal.value - evt.clientY;
    document.addEventListener("mousemove", mousemove_listener001, true);
    document.addEventListener("mouseup", mouseup_listener001, true);
}
function mousedown_listener002(evt)
{
    dx002 = rectangle002.x.baseVal.value - evt.clientX;
    dy002 = rectangle002.y.baseVal.value - evt.clientY;
    document.addEventListener("mousemove", mousemove_listener002, true);
    document.addEventListener("mouseup", mouseup_listener002, true);
}
function mousemove_listener001(evt)
{
    var id = rectangle001.ownerSVGElement.suspendRedraw(1000);
    rectangle001.x.baseVal.value = evt.clientX + dx001;
    rectangle001.y.baseVal.value = evt.clientY + dy001;
    rectangle001.ownerSVGElement.unsuspendRedraw(id);
}
function mousemove_listener002(evt)
{
    var id = rectangle002.ownerSVGElement.suspendRedraw(1000);
    rectangle002.x.baseVal.value = evt.clientX + dx002;
    rectangle002.y.baseVal.value = evt.clientY + dy002;
    rectangle002.ownerSVGElement.unsuspendRedraw(id);
}
function mouseup_listener001(evt)
{
    document.removeEventListener("mousemove", mousemove_listener001, true);
    document.removeEventListener("mouseup", mouseup_listener001, true);
}
function mouseup_listener002(evt)
{
    document.removeEventListener("mousemove", mousemove_listener002, true);
    document.removeEventListener("mouseup", mouseup_listener002, true);
}
   但是如果一开始我不会知道有多少个图形是可以拖曳的(可能1-500个), 图形个数会在与使用者互动的过程一直增加(add功能)或减少(remove功能), 请问我该如何处理这样的需求?
   例如有一个SVG画布一开始是空的, 使用者可以按add键加一个图形(例如方形)到画布上, 一旦加到画布上就必须可以立即在画布上被拖曳; 当然画布上的图形也要可以随著被滑鼠点选后(例如double click)被移除. 请问该如何做?!  
   请帮帮忙, 谢谢!!
--  作者:Joey0720080246
--  发布时间:1/31/2010 11:23:00 AM

--  
js写一个鼠标拖曳对象MouseDragging. 用面向对象来解决
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms