javascript - 当鼠标离开和进入窗口时,如何平滑地将图层从一个位置移动到另一个位置?

标签 javascript jquery mouseevent parallax

我正在改进视差效果,尝试使用鼠标离开和进入窗口的位置在两个位置之间创建平滑过渡。如果您注意到 JSFiddle 有一个“pop”,我想将其替换为过渡。我怎样才能做到这一点?

$(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

提前谢谢您。

最佳答案

也许,您可以使用 GSAP 库使偏移效果更平滑,这只是一个快速示例,请尝试一下:

var initPos = $('#layer-one').position();

$(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
  });*/
  TweenLite.to($(target), 2, {x:x, y:y});
};

document.onmouseleave = function() {
  $("#layer-one").animate({
    opacity: 0.4,
    left: 10,
  }, 'fast');
};
.layer {
  padding: 20px;
  color: white;
}

#base-layer {
  overflow: hidden;
}

#layer-one {
  background: red;
}

#layer-two {
  background: green;
}

#layer-three {
  background: blue;
}

.slider {
  margin-left: auto;
  margin-right: auto;
  overflow: hidden;
  padding-top: 200px;
}

.slider img {
  width: 80%;
  padding-left: 10%;
  padding-right: 10%;
  height: auto;
  margin-left: auto;
  margin-right: auto;
}
<script src="http://cdnjs.cloudflare.com/ajax/libs/gsap/1.19.0/TweenLite.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/gsap/1.19.0/easing/EasePack.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/gsap/1.19.0/plugins/CSSPlugin.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="base-layer">
  <div id="layer-one" class="layer">
    Content
    <div id="layer-two" class="layer">
      Content
      <div id="layer-three" class="layer">
        Content
        <section class="slider">
          <img src="http://i.imgur.com/fVWomWz.png">
        </section>
      </div>
    </div>
  </div>
</div>

关于javascript - 当鼠标离开和进入窗口时,如何平滑地将图层从一个位置移动到另一个位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42442770/

相关文章:

javascript - 出现在一行中的 Jquery UI 可拖动项目

javascript - 如何在 Capybara 中重新抓取页面?

javascript - .stop() & .animate() jQuery 函数到 javascript

javascript - 为什么 JavaScript 传播符号在这里不起作用

javascript - slider 需要超时功能动画

java - 如何借助 Selenium 中的鼠标事件从浏览器屏幕中选择文本?

c++ - 如何在 Linux 上注册/捕获终端内鼠标单击的位置?

javascript - 如果 mousedown 则触发 mousemove 否则不执行任何操作

javascript - 如何等待ajax响应然后定义对象

javascript - jQuery 选择何时属性名称以?