[OpenLayers-Users] Mouse Offset in Nested Divs
Christopher Schmidt
crschmidt at metacarta.com
Thu Sep 3 14:59:11 EDT 2009
On Thu, Sep 03, 2009 at 12:49:51PM -0600, Scott Lewis wrote:
> I am fairly new at OpenLayers, but am impressed with it's functionality.
> However, I am having a problem when it comes to nested divs with
> OpenLayers. I have some code to draw a rectangle on the map when the
> user clicks and drags. The rectangle draws fine, except it is offset
> from the mouse cursor by a fairly significant amount.
>
> Here is a skeleton of my HTML structure:
>
> <body>
> <div class="pageContentContainer">
> <div id="topBox">
> <div id="mapdiv" class="olMap"></div>
> </div>
> </div>
> </body>
>
> And some CSS relevant to the page:
>
> body {
> margin: auto;
> padding: 10px 0;
> top: -11px;
> position: relative;
> }
> /* there is a page header at the top. I didn't write this CSS */
>
> .pageContentHeader {
> clear: both;
> margin: 0;
> padding: 0;
> text-align: left;
> }
>
> #topBox {
> border: thin solid orange;
> height: 420px;
> padding: 10px;
> position: relative;
> width: 1230px;
> }
^^ This is the proble. position:relative with a border messes up page
position calculations, I beleive.
Given the amount that this is off, it is completely possible that the
padding is also an issue here.
http://trac.openlayers.org/ticket/2247
I don't know all the intracacies here, but position: relative is probably
chief among the problems.
-- Chris
> #mapdiv {
> border: thin solid red;
> height: 400px;
> position: absolute;
> right: 10px;
> width: 400px;
> }
>
> and my setup code:
>
> function initOpenLayers() {
> var mapExtent = new OpenLayers.Bounds(-3000000,-3000000,0,0);
> var mapOptions = {
> restrictedExtent: mapExtent,
> projection: 'EPSG:3408',
> maxExtent: mapExtent,
> maxResolution: 'auto'
> }
> olMap = new OpenLayers.Map('mapdiv', mapOptions);
>
> var wmsLayer = new OpenLayers.Layer.WMS(
> 'NSIDC WMS',
> 'http://nsidc.org/cgi-bin/nsidc_ogc_north.pl',
> {layers: 'blue_marble_07,north_pole_geographic'}
> );
>
> var selectionLayer = new OpenLayers.Layer.Vector('Box Drawing Layer');
>
> olMap.addLayers([wmsLayer, selectionLayer]);
>
> var selBoxControl = new OpenLayers.Control();
> OpenLayers.Util.extend(selBoxControl, {
> draw: function() {
> selectionHandler = new OpenLayers.Handler.RegularPolygon(
> selBoxControl,
> {'done': doneSelect},
> {sides:4, irregular: true, persist: true}
> );
>
> selectionHandler.activate();
> }
> });
>
> olMap.addControl(selBoxControl);
>
> olMap.setCenter(mapExtent, 0);
> olMap.updateSize();
> }
>
>
>
> When drawing, the cursor is about 10 pixels below and 30 or 40 pixels to
> the left of the corner that is being dragged.
>
>
> Does anyone know of any methods to counteract the offsets here?
>
>
> Thanks!
>
> Scott Lewis
> NSIDC
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users
--
Christopher Schmidt
MetaCarta
More information about the Users
mailing list