To change the hash without having the page reload/scroll, you can now simply use html5 history.pushState.
history.pushState(null,null,'#hashexample');
It’s supported by all the major browsers:
http://caniuse.com/history
MDN:
https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history#The_pushState().C2.A0method
Also note that the last url parameter we’re using here can be any url, so it’s not limited to hashes.