在網址列上使用 # 的方式可以直接定位到某個位置。如果希望某些動作 (ex: tab) 被點擊時也跟著改變網址上的 hash 值,就會發生視窗捲動的現象。(因為改變 window.location.hash 之後,瀏覽器會重新觸發 hash 的事件,進而調整捲軸到那個定點。
 
如果不要視窗捲動,又要改掉 hash 值該怎麼做呢? 其實有個很技巧的方式,就是改變 id 值! 做法如下:
function changeHash(hashid) {

    $('#' + hashid).attr('id', hashid + '-tmp');

    window.location.hash = '#' + hashid;

    $('#' + hashid + '-tmp').attr('id', hashid); 

}
 
雖然改掉 id 感覺怕怕的,但是查了文件,並沒有說 id 是 readonly 或是不可更動的。實際測試各個不同的瀏覽器也都支援,所以就大膽的用吧!
 
或許你會問,為何不攔截 onHashChange 呢? 
因為... 偷懶,而且 iphone 貌似不支援.... cool
Facebook 討論區載入中...