javascript - JS视差多元素位置

标签 javascript css parallax

我想在三个元素上使用视差效果,但我必须更改它们的每个位置,以便使图片位于从顶部开始的正确位置(部分)。我尝试用一​​些“if”来改变“paddTop”的值,但是当我这样做时只有最后一个视差起作用。这是我的代码:

(函数(){

var parallax = document.querySelectorAll(".paralax, .parallax2, .parallax3"),
  speed = 0.35;

window.onscroll = function (){
  [].slice.call(parallax).forEach(function (el,i){

    if (parallax==document.querySelectorAll(".parallax")){
      var paddTop = 1500;
    }
    if (parallax==document.querySelectorAll(".parallax2")){
      var paddTop = 2200;
    }
    if (parallax==document.querySelectorAll(".parallax3")){
      var paddTop = 3000;
    }

    var windowYOffset = window.pageYOffset-paddTop, 
        elBackgrounPos = "50% " + (windowYOffset * speed) + "px";

    el.style.backgroundPosition = elBackgrounPos;
    });
};

})();

如果有人知道为什么只有最后一个有效,请告诉我。 我还不是很擅长 JS,所以可能会有点错误,但它真的会帮助我。

谢谢!

[代码在我下面的下一篇文章中更新]

最佳答案

var parallax = document.querySelectorAll(".parallax"),
    parallax = document.querySelectorAll(".parallax2"),
    parallax = document.querySelectorAll(".parallax3"),
    speed = 0.35;

parallax 将始终保留最后一行 (document.querySelectorAll(".parallax3")) 的值,因为您将它分配了三次。

我猜你的意思是这样的:

var parallax = document.querySelectorAll(".paralax, .parallax2, .parallax3");

选择所有这些元素。

老实说,很难猜到你想要实现什么,因为你提供的代码对我来说没有任何意义。

第一个问题是你将值赋给 parallax,三次,所以我猜你想要一个列表来迭代,什么 [].slice.call( parallax).foreach(…) 建议。

但在回调中,您只需将全局设置的 parallaxdocument.querySelectorAll() 的结果进行比较,以将值分配给 paddTop.

如果你想根据 document.querySelectorAll() 的结果给 paddTop 赋值,你不需要迭代 parallax列表,您甚至根本不需要设置变量 parallax,因为您只需检查是否有一些元素与您的查询匹配。

那么,你想达到什么目的?

类似的东西:

var parallaxes = [
    [].slice.call(document.querySelectorAll(".parallax")),
    [].slice.call(document.querySelectorAll(".parallax2"))
];


parallaxes.forEach(function(elements, idx){
    if (idx == 0) {
        elements.forEach(function(element) {
            element.style.backgroundPosition = '…'
        })
    }

    if (idx == 0) {
        elements.forEach(function(element) {
            element.style.backgroundPosition = '…'
        })
    }

})

关于javascript - JS视差多元素位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40128979/

相关文章:

javascript - 将类添加到元素时通过转换动画 CSS

jquery - 页眉未垂直对齐

javascript - 将视差滚动效果应用于多个背景,每个背景以不同的速度滚动

javascript - Angular UI-Router嵌套 View 不显示页面

javascript - 如何将带有比较运算符的箭头函数用于 reduce 方法?

jquery - 访问jQuery中的子标签

css - 具有实际交互内容的纯 CSS 视差为 'background'?

css - 将一个 div 滚动到另一个 div 上

javascript - 删除 H1 之前的休息时间

javascript - 使用 Flask 实现强制页面刷新的最佳方法是什么?