He utilizado dojo.lugar después de que una ventana de información se abre inicialmente (después de que el infoWindow se crea un nodo en el árbol DOM) para mover el mapa del contenedor primario.
//move the info window outside of the map container so it doesn't get cut off
dojo.place(dojo.byId("map_infowindow"), dojo.byId("uxRPMapContent"), "first");
...donde uxRPMapContent es un contenedor primario para el mapa de div.
Esto sólo se mueve la ventana de información fuera del mapa - pero entonces todos los de la infoWindow del punto de anclaje de los cálculos.
*Tenga en cuenta que el contenedor primario debe tener un estilo que incluye position:relative
, de modo que la posición absoluta infoWindow se colocará en relación a los padres, no en relación con el <body>
.
Así que tenía que incluir una función en cuenta el nuevo offset. En mi caso:
function getInfoWindowOffset(screenPoint) {
//Given a point, find out the offset screen position and return
var od = dojo.position(dojo.byId("uxRPMapContent"), false); //parent
var om = dojo.position(dojo.byId("map"), false); //map
var dx = om.x - od.x;
var dy = od.y - om.y;
screenPoint.x = screenPoint.x + dx;
screenPoint.y = screenPoint.y + dy + 30;
return screenPoint;
}
En este caso, me estoy encontrando la diferencia entre el mapa y su contenedor primario, tanto en x como en y, y aplicar a una entrada de screenPoint.
Luego, cuando llega el momento de abrir la ventana (me estoy haciendo cuando una gráfica de la capa se hace clic), me pase de la pantalla de punto que suele ser usado para anclar la ventana de información en mi función personalizada para aplicar los desplazamientos:
var cpt = esri.geometry.toScreenGeometry(map.extent, map.width, map.height,e.graphic.geometry);
var nscpt = getInfoWindowOffset(cpt);
map.infoWindow.show(nscpt, map.getInfoWindowAnchor(nscpt));
(Con respecto a screenPoint.y + dy + 30 - 30 es un factor de elusión. Probablemente podría averiguar de dónde viene y que sea dinámico, pero...)
La última pieza en el que estoy trabajando es para ocultar el infoWindow si el usuario arrastra el ancla del infoWindow fuera de los límites de mapa (como lo es, el infoWindow permanece abierto y flota alrededor de la página si el usuario se desplaza demasiado lejos.)