こんにちはStackOverflowコミュニティ、
私が達成しようとしているのは、マウスで移動できるヘッダーです。ヘッダーをクリックしてマウスをドラッグすると、ヘッダー内の要素がさまざまな速度で移動します。
パララックス部分は達成しましたが、性能はあまり良くありません。背景をドラッグしている間、部分的に少し遅れています。
私の質問は、パフォーマンスを向上させるためにコードで何を変更できるかということです。
これは、パララックスを処理するコードの一部です。すべてのmousemoveで、各ループが実行されます。これが、パフォーマンスが非常に遅くなる理由だと思います。
var dragging = false;
var clickMouseX;
//Our object for the layers
//each layer has a different scrolling speed
var movingObjects = {
'#header-l1' : {'speed': 1},
'#header-l2' : {'speed': 1.4},
'#header-l3' : {'speed': 1.85},
'#header-l4' : {'speed': 2.2},
};
$('#header-wrapper').mousedown(function(e){
dragging = true;
//Get initial mouse position when clicked
clickMouseX = e.pageX;
$(this).mousemove(function(mme){
//execute only if mousedown
if(dragging){
//iterate through all layers which have to be parallaxed
$.each(movingObjects, function(el, opt){
var element = $(el);
//get difference of initial mouse position and current mouse position
var diff = clickMouseX - mme.pageX;
//scroll-position left speed 1
if(diff < 0) diff = -1;
//scroll position right speed 1
if(diff >= 0) diff = 1;
//get current position of layer
currLeft = parseInt(element.css('left'));
//get current layer width
elWidth = element.width();
//if right border is reached don't scroll further
if(currLeft < -(elWidth - 810)){
element.css('left', -(elWidth - 810));
}
//so do with left border
if(currLeft > 0){
element.css('left', 0);
}
//parallax it! Subtract the scroll position speed multiplied by the speed of the desired
//layer from the current left property
element.css('left', parseInt(element.css('left')) - diff*opt.speed);
});
}
});
/* Cursor */
$(this).css('cursor', 'pointer');
return false;
});
私もフィドルを上げました:http: //jsfiddle.net/yWGDz/
よろしくお願いします、トーマス
PSおそらく誰かが、レイヤー2と3が同じスクロール速度を持ちながら、異なる速度が定義されている理由を見つけたかもしれません。