好吧,就在这里。http://artiris.clients.twi.tl/galeries/galerie-bleue
不确定这是否是最好的方法,但它似乎有效!
当滑块开始移动时,我开始一个超时,它每 100 毫秒运行一个函数。当滑块停止移动时,超时清除。
这是我的功能:
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+')' })
}
}
基本上它得到滑块的位置。然后对于每个节点,我得到它的当前位置并计算到中心的距离。这个距离是标准化的,因此它永远不会大于幻灯片的宽度。然后我使用该数字实时设置每个节点的模糊和灰度。这样效果是连续的。
到目前为止,性能似乎还不错。无论如何,我只会在浏览器支持过滤器属性时运行该函数。
如果有人可以建议我改进此代码的方法,我会全力以赴。