Jess Collicott <JCollicott@msiinet.com> wrote:
> I would like the element to be positioned relative
> to where the event took place to move the
> element (onclick for example), and be visually
> consistent whether the page has been scrolled
> or not.
Sadly, you can't do it in DOM Level 2 Events. The event object has a
(screen-relative) screenX and (window-relative) clientX property, but no
page-relative property, which is of course by far the most useful one.
IE's window.event object has an ancestor-relative offsetX property which
you can use to get it, but there's no way to get that in Mozilla (even
though Moz implement's IE's offsetX for other elements). Another IE-only
way is to read document.body.scrollTop to work out how to turn
client-relative into page-relative co-ordinates.
A IE/Moz workaround would be to ensure the parent element (eg. body) of
the thing you want to position never scrolls. This can be achieved by
putting all the content in a scrolling div separately from the
positionable element, eg.:
HTML
<body>
<div id="content">Lorem ipsum thingy blah</div>
<div id="floating">I appear under your mouse!</div>
</body>
CSS
#floating { position: absolute;
visibility: hidden; z-index: 2;
}
#content { position: absolute;
top: 0; left: 0; width: 100%; height: 100%;
overflow: auto; z-index: 1;
}
Then the window-relative clientX and clientY values are useful, since
they can be used to position the 'floating' div regardless of scrolling.