2012-03-30 52 views

回答

2

這是一個古老的問題,但經過高低搜索,我從來沒有找到答案,所以這裏是我製作工具提示在gfx形狀上顯示的內容。當HTML5 Canvas是渲染器時,它專門用於解決此問題,但應與其他渲染器一起使用。這是在Dojo和Dojox 1.8中完成的;還沒有在其他版本中嘗試過。

主要技巧是使用dijit.Tooltip的靜態show()和hide()方法,爲它們提供構建工具提示的信息,而不是製作dijit.Tooltip實例。 (dijit.Tooltip實例只會響應特定的DOM元素而被顯示,如果您使用的是canvas渲染器,則此功能將不起作用。)使用靜態方法,可以將渲染的工具提示放在任意位置以響應所需事件。您的主要任務是計算工具提示應顯示的位置,並確保綁定事件以隱藏()工具提示。

您可能希望存儲您自己的包含必要信息的自定義對象,以便手動顯示();這可以使你的工具提示管理更容易,如果你有很多。

Tooltip.show()需要如下:

  • X,Y,寬度(w)和高度(h),以使一個矩形區域,其中工具提示會出現(即 '圍繞' 對象) 。
  • 一個字符串,用於定義渲染工具提示相對於'around'中定義的矩形的位置。有關可能的值,請參閱Tooltip API。
  • 您的工具提示的內容。

有幾件事情實施這個時候要記住:

  • 在撰寫本文時,形狀使用Dojo /連接,道場/上。
  • 當你想用hide(),而不是它包含的值來隱藏它時,用於傳遞給show()的'around'對象引用用於標識工具提示,所以你不能僅僅使用一個新對象相同的值來隱藏工具提示;調用show()時需要使用實際的引用。 (因此,您可以自己定製'工具提示'信息對象以便於訪問。)
  • 「周圍」座標是絕對值,不是表面元素或表面容器元素值,但形狀的座標將位於表面值中。如果這是您的目標,則需要計算絕對值以顯示相對於您的形狀的工具提示。

在該方法:

對於每個形狀或想要tooltipped基,附上對應時要顯示工具提示的事件;例如。 mouseenter,點擊,一些按鍵事件。此事件應該調用靜態方法Tooltip.show,並綁定相應的事件以便當時用Tooltip.hide關閉Tooltip。我還想在它觸發時立即斷開hide()事件;在dojo /你會做on.once(但據我所知你不能使用dojo/on的gfx形狀呢)。

var shape1Bb = shape1.getTransformedBoundingBox(); 

var shape1Tooltip = { 
    content: "<p>I am a black and gray rectangle.</p>", 
    around: { 
     x: shape1Bb[1].x+myCanvasContainer.offsetLeft, 
     y: shape1Bb[1].y-(Math.round((shape1Bb[1].y - shape1Bb[2].y)/2))+myCanvasContainer.offsetTop, 
     w: 1, 
     h: 1 
    }, 
    position: ["after-centered","before-centered"] 
}; 

shape1.connect("onmouseenter",function(e){ 
    Tooltip.show(
     shape1Tooltip.content, 
     shape1Tooltip.around, 
     shape1Tooltip.position 
    ); 
    var mouseOutHandler = shape1.connect("onmouseout",function(e){ 
     Tooltip.hide(shape1Tooltip.around); 
     dojo.disconnect(mouseOutHandler); 
    }); 
}); 

的jsfiddle:http://jsfiddle.net/XQyy2/

相關問題