Есть ли простой подход, чтобы добавить всплывающую подсказку на форму dojox.gfx
Я нашел решение в http://bugs.dojotoolkit.org/ticket/10794, но это было только для dojo 1.4
для dojo версии 1.7 dojox.gfx.tooltip отсутствует. Plz...
1 ответ
Это старый вопрос, но после поиска высоко и низко я так и не нашел ответа, поэтому вот что я разработал, чтобы подсказки отображались на фигурах gfx. Это специально предназначено для решения этой проблемы, когда HTML5 Canvas является средством визуализации, но должно работать с другими средствами визуализации. Это было сделано в Dojo и Dojox 1.8; не пробовал это в других версиях.
Основной трюк состоит в том, чтобы использовать статические методы show() и hide() dijit.Tooltip, предоставляя им информацию для создания всплывающей подсказки, вместо создания экземпляров dijit.Tooltip. (Экземпляры dijit.Tooltip отображаются только в ответ на наложение определенных элементов DOM, что не сработает, если вы используете рендерер canvas.) Использование статических методов позволяет расположить отображаемую подсказку в любом месте в ответ на желаемый событие. Ваша основная задача - рассчитать, где должна появиться всплывающая подсказка, и убедиться, что события привязаны, чтобы скрыть () всплывающую подсказку.
Вы можете захотеть хранить свои собственные объекты, содержащие необходимую информацию для показа (); это может упростить управление вашими подсказками, если их много.
Tooltip.show() необходимо следующее:
- x, y, width (w) и height (h), чтобы создать прямоугольную область, где появится всплывающая подсказка (объект "вокруг").
- Строка, определяющая положение отображаемой всплывающей подсказки относительно прямоугольника, определенного в "вокруг". См. Tooltip API для возможных значений.
- Содержание вашей подсказки.
При реализации этого необходимо учитывать несколько моментов:
- На момент написания этой статьи фигуры используют dojo/connect, а не dojo/on.
- Ссылка "вокруг" на объект, которую вы передаете в show(), используется для идентификации всплывающей подсказки, когда вы хотите скрыть ее с помощью hide(), а не значений, которые она содержит, поэтому вы не можете просто использовать новый объект с такими же значениями, чтобы скрыть подсказка; вам нужно иметь фактическую ссылку, используемую при вызове show(). (Отсюда наличие собственных пользовательских информационных объектов "всплывающей подсказки" для быстрого доступа.)
- Координаты "вокруг" представлены в абсолютных значениях, а не в значениях элемента поверхности или элемента контейнера поверхности, но координаты вашей фигуры будут в значениях поверхности. Вам нужно вычислить абсолютные значения для отображения всплывающей подсказки относительно вашей фигуры, если это ваша цель.
По методу:
Для каждой фигуры или группы, для которой вы хотите всплывающую подсказку, прикрепите событие, соответствующее тому, когда вы хотите, чтобы подсказка была показана; например. mouseenter, click, какое-нибудь событие нажатия клавиши. Это событие должно вызывать статический метод Tooltip.show и связывать соответствующее событие, чтобы закрыть Tooltip.hide в это время. Мне также нравится отключать событие hide(), как только оно запускается; в dojo / on вы бы делали 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/