さて、ここにあります。http://artiris.clients.twi.tl/galeries/galerie-bleue
それが最善の方法かどうかはわかりませんが、うまくいくようです!
スライダーが動き始めると、100ms ごとに関数を実行するタイムアウトを開始します。スライダーの動きが止まると、タイムアウトはクリアされます。
ここに私の機能があります:
function adjustFilter() {
var nodes = $gallerySlider.data('iosslider').slideNodes,
stage = $gallerySlider.data('iosslider').stageWidth,
matrix = $slider.css("-webkit-transform") ||
$slider.css("-moz-transform") ||
$slider.css("-ms-transform") ||
$slider.css("-o-transform") ||
$slider.css("transform"),
matrixArray = matrixToArray(matrix),
position = Math.abs(matrixArray[4]);
for(var i = 0; i < nodes.length; i++) {
var $node = $(nodes[i]),
nodeMatrix = $node.css("-webkit-transform") ||
$node.css("-moz-transform") ||
$node.css("-ms-transform") ||
$node.css("-o-transform") ||
$node.css("transform"),
nodeMatrixArray = matrixToArray(nodeMatrix),
nodePosition = Math.abs(nodeMatrixArray[4]),
distance = Math.abs(Math.min(Math.max(parseInt(nodePosition-position), stage*(-1)), stage)),
tx = distance/stage;
$node.css({ '-webkit-filter' : 'blur('+tx*10/2+'px) grayscale('+tx+')' })
}
}
基本的にはスライダーの位置を取得します。次に、ノードごとに現在の位置を取得し、中心からの距離を計算します。この距離は、スライドの幅を超えないように正規化されています。次に、その数値を使用して、すべてのノードのぼかしとグレースケールをリアルタイムで設定します。このように、効果は継続的です。
今のところ、性能は良さそうです。いずれにしても、フィルター プロパティがブラウザーでサポートされている場合にのみ関数を実行します。
誰かがこのコードを改善する方法を提案できるなら、私はすべて耳にします。