javascript - 视差效果使元素跟随滚动延迟

标签 javascript jquery html css parallax

我正在尝试复制此站点:www.adidas.co.uk/climazone。在用户滚动后,元素似乎只会轻微移动。我怎样才能做到这一点?谢谢!

最佳答案

这是 DEMO
它实际上使用了 debounce/throttle effect。当你向上/向下滚动时,你不应该直接修改/动画 DOM 元素,因为滚动事件可以高速触发,在这种情况下,动画 DOM 元素可能表现得很奇怪,所以为了避免这种情况,你可以使用 windowAnimationFrame 或 setTimeout 来限制/去抖动事件

使用 setTimeout 节流 taken from Source

Function.prototype.debounce = function(threshold){
    var callback = this;
    var timeout;
    return function() {
        var context = this, params = arguments;
        window.clearTimeout(timeout);
        timeout = window.setTimeout(function() {
            callback.apply(context, params);
        }, threshold);
    };
};

function animLoop(){
 ....
}
var test=animLoop.deboune(50);
$(window).on('scroll',test);

Window.requestAnimationFrame() MDN Scource

Window.requestAnimationFrame() 方法告诉浏览器您希望执行动画并请求浏览器在下一次重绘之前调用指定的函数来更新动画。

var last_known_scroll_position = 0;
var ticking = false;

function doSomething(scroll_pos) {
  // do something with the scroll position
}

window.addEventListener('scroll', function(e) {
  last_known_scroll_position = window.scrollY;
  if (!ticking) {
    window.requestAnimationFrame(function() {
      doSomething(last_known_scroll_position);
      ticking = false;
    });
  }
  ticking = true;
});

关于javascript - 视差效果使元素跟随滚动延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37502075/

相关文章:

javascript - 如何隐藏和显示表格行中的元素以允许内联编辑

javascript - 如何从中心在图像上方画一条垂直线?

javascript - 如何通过javascript发出跨域请求

javascript - 有没有办法在 Reactjs 中设置元素的初始高度?

javascript - jQuery hide() 方法确实显示具有显示 :none ! 重要的元素

css - 如何在 webkit 浏览器中更改类型为 'number' 的输入字段中旋转按钮的大小?

javascript - 有谁知道如何计算表中的TR?

JavaScript:instanceof 运算符

javascript - 闪存和 IE : “Object doesn’ t support this property or method” error (using ExternalInterface)

jquery - 粘性页脚高度问题