javascript - 如何获取包含特定类的元素的数据属性?

标签 javascript parallax

我正在 Vanilla JavaScript ES5 中制作视差效果。

我想要实现的是设置一个数据属性,并放入我想要视差的速度。

这是代码笔:https://codepen.io/Aurelian/pen/vdQMYo?editors=0011

这是 HTML:

<section class="page-intro">
    <div class="page-intro__img js-parallax" data-parallax-speed="-0.5" style="background-image: url(https://metrouk2.files.wordpress.com/2017/03/512366437.jpg?w=748&h=498&crop=1);">

    </div>
    <div class="page-intro__overlay"></div>

    <!-- Two Different Parts, big and small -->
    <div class="page-intro__content">
        <h1 class="page-intro__title">Puppy</h1>
        <span class="page-intro__sub-title">Explore how my design process can help your business grow and succeed.</span>
    </div>

    <div class="page-intro__content">

    </div>

</section>
<section class="page-intro">
    <div class="page-intro__img js-parallax" data-parallax-speed="-0.2" style="background-image: url(https://metrouk2.files.wordpress.com/2017/03/512366437.jpg?w=748&h=498&crop=1);">

    </div>
    <div class="page-intro__overlay"></div>

    <!-- Two Different Parts, big and small -->
    <div class="page-intro__content">
        <h1 class="page-intro__title">Puppy</h1>
        <span class="page-intro__sub-title">Explore how my design process can help your business grow and succeed.</span>
    </div>

    <div class="page-intro__content">

    </div>

</section>

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

这是 JS:

window.onload = function() {
  var parallax = document.getElementsByClassName('js-parallax');
  var xScrollPosition;
  var yScrollPosition;

  console.log("Data speed is:" + dataSpeed);

    function setTranslate(xPos, yPos, el) {
        el.style.transform = "translate3d(" + xPos + ", " + yPos + "px, 0)";
    }

  function scrollLoop() {
      xScrollPosition = window.scrollX;
      yScrollPosition = window.scrollY;

      for(var i = 0; i < parallax.length; i++) {
        parallaxEl = parallax[i];
        var dataSpeed = parallaxEl.getAttribute('data-parallax-speed');
        setTranslate(0, yScrollPosition * dataSpeed, parallaxEl);

      }
  }
    window.addEventListener("scroll", scrollLoop, false);

}

最佳答案

问题在于 .getAttribute()data- 属性一起使用。访问这些数据的正确方法是通过 HTMLElement 的 dataset 映射。文档在这里:https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes

这有效:https://codepen.io/anon/pen/zRMgyX?editors=0011

window.onload = function() {
  var parallax = document.querySelectorAll('.js-parallax');
  var xScrollPosition;
  var yScrollPosition;

//  console.log("Data speed is:" + dataSpeed);

    function setTranslate(xPos, yPos, el) {
        el.style.transform = "translate3d(" + xPos + ", " + yPos + "px, 0)";
    }

  function scrollLoop() {
      xScrollPosition = window.scrollX;
      yScrollPosition = window.scrollY;
      parallax.forEach(p=>{
         var dataSpeed = p.dataset.parallaxSpeed; 
         setTranslate(0, yScrollPosition * dataSpeed, p);
      })
  }
    window.addEventListener("scroll", scrollLoop, false);

}

关于javascript - 如何获取包含特定类的元素的数据属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49013828/

相关文章:

javascript - 用 jQuery 模拟鼠标的圆形移动?

javascript - 无法使用对象方法从自定义 javascript 对象数组属性获取对象

javascript - 视差图像太多

jquery - 为移动设备禁用 Skrollr ( <767px )

javascript - "Element is not clickable at point (x,y)"。不可见元素覆盖按钮

html - CSS改变滚动固定标题的背景颜色

javascript - 视差滚动 : Unwanted gap in between layers

javascript - 动画在 IE 中失败

javascript - 在事件处理程序中异步执行函数是否有意义?

javascript - 如何在JavaScript中隐藏html标签内容?