2011-12-07 22 views
1

我正在製作一個jQuery視差效果,當用戶首次將鼠標懸停在文檔上時,前景層將朝鼠標光標移動,使得鼠標光標將位於前景層。之後,當用戶在鼠標光標周圍移動時,前景層應該移動鼠標光標的相反方向;背景層也會沿相反方向移動,但速度較慢以產生視差效果。製作我自己的JQuery視差效果

問題是,前景層使用mouseover事件向着鼠標光標移動並觸發mousemove事件後,前景層和背景層將「跳轉」到另一個位置。

jsfiddle

+0

不太清楚你後話,但我修改了小提琴使用'.animate',而不是'.css'。現在沒有跳躍,但小部件感覺像厄運的蝴蝶魚缸。 http://jsfiddle.net/karim79/jPFAq/1/您可能需要延遲一些時間以阻止瀏覽器排隊所有鼠標活動。如果這是你想要的,那麼我會作爲答案發布。 – karim79

+0

我已經試過了。這只是不太敏感。我想堅持我現在的效果,但沒有傳送蝴蝶。 – user701510

回答

2

我已經更新了你的榜樣,它似乎,它現在工作的很好(至少在谷歌瀏覽器15和IE9)。

http://jsfiddle.net/jPFAq/10/

基本上,我已經改變mouseovermouseentermouseenter相同mousemove作出的座標計算。


UPDATE:
此外,我已刪除了使用可變的,我剛剛從mousemove事件(jQuery.unbind)退訂,將mouseenter處理程序運行時。

這裏是參考代碼:

function onmousemovehandler(e){  
    mouse_dx = -(e.pageX); 
    mouse_dy = -(e.pageY); 
    $('#foreg').css({ 

     'left': mouse_dx, 
     'top': mouse_dy 
    }); 

    mouse_dx = (mouse_dx)/2; 
    mouse_dy = (mouse_dy)/2; 

    $('#backg').css({ 

     'left': mouse_dx, 
     'top': mouse_dy 

    }); 
}; 

$(document).mouseenter(function(e) { 
      $(document).unbind('mousemove', onmousemovehandler); 

    mouse_x = -(e.pageX); 
    mouse_y = -(e.pageY); 

    $('#foreg').animate({ 
     'left': mouse_x, 
     'top': mouse_y 
    }, 
    300); 
    $('#backg').animate({ 
     'left': mouse_x/2, 
     'top': mouse_y/2 
    }, 
    300, 
    function() {   
     $(document).mousemove(onmousemovehandler); 
     }); 
}); 
+0

謝謝,這工作得很好 – user701510