views:

147

answers:

2

I need a cross browser way of capturing the right mouse click, preventing the default context menu and making it where when the user drags the mouse they can pan the contents of a div. This is largely similar to Google maps in that they will grip the contents and drag to see what they want.

No external libraries please.

I am already capturing the events, and know that this will prevent default actions:

  if (evt.preventDefault)
 {
        evt.preventDefault();
 }
    else
 {
        evt.returnValue = false;
 }

But this doesn't prevent the context menu AFAIK.

Edit: I really am unsure about how to prevent the context menu and what the best way to manipulate the scroll bars would be? examples would be great

+1  A: 

This tutorial on scrollbar parallax scrolling might be of some use;

http://inner.geek.nz/javascript/parallax/

MatW
Well I don't need things going at different speeds but this does look helpful to the second part of my question. It looks like speed ratio is just a matter of trial and error until you find what works?
Shaunwithanau
Your other comment makes things clearer; I was imagining a background pan rather than a gmaps effect. I would say 1:1 mouse movement to div pan, but if the div is small then a faster pan speed might be kinder to your users. If the user is "gripping" and pulling the content (like gmaps) then a 1:1 ratio makes sense from a UI perspective, as it simulates the physical act of pushing the content about on a tabletop.
MatW
I checked and it is "gripping" rather than relative to the fixed point where they initially clicked that I am trying to reproduce. So 1:1 does make sense. I assume the easiest thing is to just use ScrollBy()? Is this cross browser?
Shaunwithanau
A: 

So I'm using oncontextmenu="return false" which I know can be over-ridden by user preference but for those people they can use the menu bar options at the top of my app.

To handle the scrolling I am just modifying div.scrollLeft and div.scrollTop

Shaunwithanau