jquery - Mousemove视差效果移动div的位置

标签 jquery css parallax

我正在尝试创建一个轻微的视差效果(我不确定它是否真的构成视差,但这是一个类似的想法)。当鼠标移动时,有四个层都以略微不同的速度四处移动。

我找到了一个很好的例子,它提供了与我想要的类似的东西:

http://jsfiddle.net/X7UwG/2/

它通过在鼠标移动时移动 #landing-content div 上的背景位置来实现这一点。

$(document).ready(function(){
  $('#landing-content').mousemove(function(e){
    var x = -(e.pageX + this.offsetLeft) / 20;
    var y = -(e.pageY + this.offsetTop) / 20;
    $(this).css('background-position', x + 'px ' + y + 'px');
  });  
});

但是,我无法想出一种方法来让它在 background-position 偏移上工作,但在 div 位置偏移上工作。例如 position:relative;top:x 这样 div 本身就会移动一点。

我的理由是 div 包含 CSS 动画元素,因此它需要是一个包含内容的 div,而不是背景图像。

使用上面的代码有什么解决方案吗?

最佳答案

改用 jQuery.offSet() 怎么样?您可能想要调整数学/值,但我认为它应该让您朝着正确的方向前进。

$(document).ready(function () {
    $('#layer-one').mousemove(function (e) {
        parallax(e, this, 1);
        parallax(e, document.getElementById('layer-two'), 2);
        parallax(e, document.getElementById('layer-three'), 3);
    });
});

function parallax(e, target, layer) {
    var layer_coeff = 10 / layer;
    var x = ($(window).width() - target.offsetWidth) / 2 - (e.pageX - ($(window).width() / 2)) / layer_coeff;
    var y = ($(window).height() - target.offsetHeight) / 2 - (e.pageY - ($(window).height() / 2)) / layer_coeff;
    $(target).offset({ top: y ,left : x });
};

JSFiddle:http://jsfiddle.net/X7UwG/854/

关于jquery - Mousemove视差效果移动div的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30761409/

相关文章:

javascript - Elfinder如何自定义菜单

javascript - 我如何才能准确识别事件监听器从中触发的元素?

html - 对齐使用自定义元素符号点时换行的 li 文本

jquery - 隐藏特定属性的标签

html - 我可以嵌套 CSS 视差组吗?

html - 视差图像填充屏幕而不是 div

javascript - 闪烁 - 在窗口滚动时更改 CSS 背景位置

javascript - 为什么未在输入字段中设置值(已使用 "value":"ddd")?

javascript - 如何使用 jquery 选择下拉列表中的第一个元素?

jquery - if 语句的问题 - 屏幕宽度