2014-01-16 89 views
1

所以我有一個對象在一個頁面上的背景圖像和mousemove它移動相對於鼠標的背景位置。但是我唯一的問題是當背景圖像進入對象時將背景圖像設置爲鼠標的當前位置。動畫背景圖像相對於mousemove

我可以將背景位置動畫回到其原始位置。

繼承人我的jQuery

//MOUSE MOVE, INVERT BACKGROUND POSITION 
    jQuery('.homeSlider').mousemove(function(move){ 
     var moveMouse = (move.pageX * -1/15); 
     jQuery('.homeSlider .slide').css({ 
      'background-position-x': moveMouse + 'px' 
     }); 
    }); 
    //MOUSE LEAVE, ANIMATE BACKGROUND TO START POSITION 
    jQuery('.homeSlider').mouseleave(function(){ 
     jQuery('.homeSlider .slide').animate({ 
      'background-position-x': '0' 
     }); 
    }); 

http://jsfiddle.net/TWHh2/

回答

1

添加這個CSS

.slide { 
    transition: background-position-x 0.5s; 
} 

updated fiddle

+0

+1我不理解它是如何工作的! – Abhitalks

+0

這樣做的缺點是它也會影響'mousemove'函數,並且使背景圖片移動不再平滑,也不會非常靈敏。 – Zhihao

+0

@abhitalks它只是將background-position-x屬性「轉換」爲0.5秒。也就是說,對財產進行的更改是以一種轉換的方式更新的。 – vals

1

在除了建議使用CSS轉換之外,還可以使用JS來設置位置或根據需要移動的距離設置動畫效果。如果距離超過閾值,您可以爲其設置動畫(否則動作會變得跳動)。否則,請按照您當前的設置CSS。

像這樣的東西可能工作:

var animating = false; 
jQuery('.homeSlider').mousemove(function(move){ 
    var $slider = jQuery('.homeSlider .slide'); 
    var moveMouse = (move.pageX * -1/3); 
    var bgPos = $slider.css('background-position-x'); 

    if (!animating && Math.abs(moveMouse - parseInt(bgPos)) > 10) { 
     animating = true; 
     $slider.animate({ 
      'background-position-x': moveMouse + 'px' 
     }, 400); 
     setTimeout(function() { 
      animating = false; 
     }, 400); 
    } else if (!animating) { 
     $slider.css({ 
      'background-position-x': moveMouse + 'px' 
     }); 
    } 
}); 

jsFiddle

我會推薦這在純CSS的解決方案,因爲這將始終應用於動畫,其中包括小背景的位置變化。如果您檢查轉換過程中的小提琴,平滑的背景效果不再非常敏感,並且會失去一些平滑感。

這樣做的缺點是,當鼠標快速移動時,響應變得很差,類似於純CSS解決方案。

替代

合併JS和CSS過渡的解決方案:

CSS

.slide.animate { 
    transition: background-position-x 0.4s; 
} 

JS

... 
if (!$slider.hasClass('animate') && Math.abs(moveMouse - parseInt(bgPos)) > 10) { 
    $slider.addClass('animate'); 
    setTimeout(function() { 
     $slider.removeClass('animate'); 
    }, 400); 
} 
... 
+0

當鼠標移動背景時,這是很好的壽! – TheOne

+0

@TheOne如果我不太快移動鼠標,它對我來說效果很好。該示例還可以通過添加一個'mouseenter'事件處理程序,並通過'mousemove'檢查來查看背景是否由'mouseenter'事件動畫。那麼你不需要'mousemove'事件的動畫部分。 – Zhihao

+0

+1我喜歡你的選擇 – vals