Javascript 平滑视差效应

Javascript 平滑视差效应,javascript,parallax,Javascript,Parallax,我想做一个视差效果。是的,我知道有现成的解决方案,但出于自我教育的目的,我决定用“普通”js(没有jq)从头开始写这篇文章。所以我面临的问题是,我通过js处理的“层”在晃动,只有当我用鼠标滚轮滚动页面时才会出现。使用滚动条手动滚动效果良好。我将此代码用于图层更新: window.onscroll = function () { requestAnimFrame(scrollCalc); } scrollCalc = function() { for (var i = 0; i

我想做一个视差效果。是的,我知道有现成的解决方案,但出于自我教育的目的,我决定用“普通”js(没有jq)从头开始写这篇文章。所以我面临的问题是,我通过js处理的“层”在晃动,只有当我用鼠标滚轮滚动页面时才会出现。使用滚动条手动滚动效果良好。我将此代码用于图层更新:

window.onscroll = function () {
    requestAnimFrame(scrollCalc);
}

scrollCalc = function() {
    for (var i = 0; i < parallaxes.length; i++) {
        var offset = (parallaxParents[i].getBoundingClientRect().top) * (-1) * parallaxes[i].magnitude;
        parallaxes[i].style.transform = "translate3d(0, " + offset + "px, 0)";
    }
}

requestAnimFrame = (
    window.requestAnimationFrame       ||
    window.webkitRequestAnimationFrame ||
    window.mozRequestAnimationFrame    ||
    window.oRequestAnimationFrame      ||
    window.msRequestAnimationFrame     ||
    function(callback) {
        setTimeout(callback, 1000 / 60);
    }
);
window.onscroll=函数(){
requestAnimFrame(scrollCalc);
}
scrollCalc=函数(){
对于(var i=0;i
视差变量存储视差层的父dom元素,而视差变量存储视差层本身

PS:我在chrome上看到的那些震动,firefox有微滞后。我认为,这两个细微差别的根本原因可以在同一个问题中涵盖


对不起,我的英语不好

已经解决了。我已经用这种方式覆盖了默认的鼠标滚轮功能

    window.onmousewheel = function (e) {
        e.preventDefault();
        window.scrollTo(window.pageXOffset + e.deltaX/scrollRatio, window.pageYOffset + e.deltaY/scrollRatio)
    }

也许这不是最好的解决方案,但效果很好。卷轴上的抖动消失。

已解决。我已经用这种方式覆盖了默认的鼠标滚轮功能

    window.onmousewheel = function (e) {
        e.preventDefault();
        window.scrollTo(window.pageXOffset + e.deltaX/scrollRatio, window.pageYOffset + e.deltaY/scrollRatio)
    }

也许这不是最好的解决方案,但效果很好。卷轴上的抖动消失。

请提供一个小提琴或完整的片段(包括最小的HTML、JS、CSS)来说明问题。此外,我不太确定在这种情况下为什么需要使用
requestAnimationFrame
。您经常使用它来检查当前偏移量,无论是否有滚动,或者在触发滚动事件时直接执行工作,这似乎很正常。请提供一个小提琴或完整的片段(包括最小的HTML、JS、CSS)我也不太清楚在这种情况下为什么需要使用
requestAnimationFrame
。您经常使用它来检查当前偏移量,无论是否有滚动,或者在触发滚动事件时直接执行工作,这似乎很正常。