【发布时间】:2017-03-17 23:16:29
【问题描述】:
为清楚起见,编辑此问题。
我正在尝试基于mousemove 创建视差效果,但遇到了一些问题。
1) 我无法获得正确的window 偏移量。如果您看到 JSFiddle,您会注意到偏移量与指针进入 window 的位置有关。我想让asset-layer 偏移始终基于window 的中间。我该怎么做才能解决这个问题?
2) 你会注意到,当我复制它时,视差会改变强度。我之前尝试过一个循环在所有它们之间进行迭代,但我没有成功。为什么会发生这种情况,我该如何预防?
HTML
<section class="one">
<div class="parallax">
<div class="asset asset-layer4">4</div>
<div class="asset asset-layer3">3</div>
<div class="asset asset-layer2">2</div>
<div class="asset asset-layer1">1</div>
</div>
</section>
<section class="two">
<div class="parallax">
<div class="asset asset-layer4">4</div>
<div class="asset asset-layer3">3</div>
<div class="asset asset-layer2">2</div>
<div class="asset asset-layer1">1</div>
</div>
</section>
<section class="three">
<div class="parallax">
<div class="asset asset-layer4">4</div>
<div class="asset asset-layer3">3</div>
<div class="asset asset-layer2">2</div>
<div class="asset asset-layer1">1</div>
</div>
</section>
JS
var currentX = '';
var currentY = '';
var movementConstant = .015;
$(document).mousemove(function(e) {
if (currentX == '')
currentX = e.pageX;
var xdiff = e.pageX - currentX;
currentX = e.pageX;
if (currentY == '')
currentY = e.pageY;
var ydiff = e.pageY - currentY;
currentY = e.pageY;
$('.parallax div').each( function(i) {
var $el = $(this);
var movementx = (i + 1) * (xdiff * movementConstant);
var movementy = (i + 1) * (ydiff * movementConstant);
var newX = $el.position().left + movementx;
var newY = $el.position().top + movementy;
$el.css({left: newX + 'px', top: newY + 'px'});
});
});
CSS
.one,
.two,
.three {
position: relative;
width: 100%;
height: 200px;
}
.one { background-color: pink; }
.two { background-color: lightgray; }
.three { background-color: orange; }
.parallax {
position: absolute;
left: 50%;
top: 50%;
bottom: 50%;
right: 50%;
overflow: visible;
}
.asset {
position: absolute;
}
.asset-layer1 {
background-color: yellow;
}
.asset-layer2 {
background-color: green;
}
.asset-layer3 {
background-color: blue;
}
.asset-layer4 {
background-color: red;
}
提前谢谢你。
【问题讨论】:
-
each内循环与循环内循环相同! -
是的,这是可能的。相关的 HTML 在哪里?
-
你能发布
.parallax-...元素的HTML吗?有没有更多的同一个班级(例如有多少parallax-1?)? -
你如何让我们的生活更轻松并制作一个 jsfiddle。
-
@Chris,我会的。
标签: javascript jquery parallax