javascript - iScroll 视差效果

标签 javascript parallax iscroll

我试图了解视差如何与 iscroll5 配合使用。据我了解,我可以将容器定义为改变滚动速度的指示器。然而我需要做的是同时对多个元素应用速度比。

让我们以下面的示例为例,如何立即更改所有 h2 元素的 speedratioX

这是jsfiddle (可能更容易)下面是SO中的相同示例:

var container = document.getElementsByClassName('iscroll__wrapper')[0],
    myScroll = new IScroll(container, { 
      scrollX: true, 
      scrollY: false, 
      mouseWheel: true
    });
.iscroll__wrapper {
  overflow-x: scroll;
  overflow-y: hidden;
}

ul {
  margin: 0;
  padding: 0;
  display: flex;
  width: 1200px;
  height: 300px;
}

li {
  box-sizing: border-box;
  flex: 0 0 auto;
  width: calc(100% / 3);
  padding-left: 2em;
  padding-right: 2em;
  list-style: none;
}

figure {
  margin: 0;
}

img {
  display: block;
  width: 100%;
  height: auto;
}
<script src="https://cdn.jsdelivr.net/npm/iscroll/build/iscroll-probe.js"></script>
<div class="iscroll__wrapper">
  <ul>
    <li>
      <figure><img src="https://lorempixel.com/900/200"></figure>
      <h2 class="title">Title 1</h2>
    </li>
    <li>
      <figure><img src="https://lorempixel.com/900/200"></figure>
      <h2 class="title">Title 1</h2>
    </li>
    <li>
      <figure><img src="https://lorempixel.com/900/200"></figure>
      <h2 class="title">Title 1</h2>
    </li>
  </ul>
</div>

现在,我的问题是:

  • 仅使用 iScroll 可以做到吗?如果是这样,如何(文档只提到改变整个容器的速度比)?

  • 如果不可能,我愿意接受任何其他可以与 iScroll 集成并且不需要 jQuery 的建议。

感谢您的帮助!

最佳答案

好的,我已经找到解决方案了。我将其发布在这里作为答案,以防它可以帮助某人。

所以我注意到您可以传递一组指示器,而不仅仅是一个元素。因此,我使用了 for 循环来填充我在创建新的 IScroll 类时使用的数组。

它的外观如下:

var container = document.getElementsByClassName('iscroll__wrapper')[0],
  containerLis = container.getElementsByTagName('li'),
  indicatorsArr = [],
  myScroll;

// Generating the indicators array
for (var i = 0; i < containerLis.length; i++) {
  var indicatorEl = container.getElementsByTagName('h2')[i];

  indicatorsArr[i] = {
    el: indicatorEl,
    resize: false,
    ignoreBoundaries: true,
    listenX: true,
    listenY: false,
    speedRatioX: 0.3
  };
}

// Creating a new IScroll class
myScroll = new IScroll(container, {
  scrollX: true,
  scrollY: false,
  mouseWheel: true,
  indicators: indicatorsArr
});
.iscroll__wrapper {
  overflow-x: scroll;
  overflow-y: hidden;
}

ul {
  margin: 0;
  padding: 0;
  display: flex;
  width: 1200px;
  height: 300px;
}

li {
  box-sizing: border-box;
  flex: 0 0 auto;
  width: calc(100% / 3);
  padding-left: 2em;
  padding-right: 2em;
  list-style: none;
}

figure {
  margin: 0;
}

img {
  display: block;
  width: 100%;
  height: auto;
}

h2 {
  padding-left: 5em;
}
<script src="https://cdn.jsdelivr.net/npm/iscroll/build/iscroll.js"></script>
<div class="iscroll__wrapper">
  <ul>
    <li>
      <figure><img src="https://lorempixel.com/900/200"></figure>
      <h2><span>Title 1</span></h2>
    </li>
    <li>
      <figure><img src="https://lorempixel.com/900/200"></figure>
      <h2><span>Title 2</span></h2>
    </li>
    <li>
      <figure><img src="https://lorempixel.com/900/200"></figure>
      <h2><span>Title 3</span></h2>
    </li>
  </ul>
</div>

关于javascript - iScroll 视差效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46349525/

相关文章:

javascript - 在 ASP.NET MVC View 中包含脚本引用的最佳方法是什么?

jquery - 背景覆盖+视差

jquery - 使用鼠标滚轮实现平滑滚动缓动效果

javascript - 使用 Iscroll 脚本设置滚动位置

javascript - 提高大表上的 iScroll 性能

javascript - puppeteer 在运行所有 Jest 测试之前关闭浏览器

javascript - 为什么 jQuery 选择器 (("parent > child") 会跳过子项?

javascript - Angular 复制对象到对话框

css - (CSS) 使背景图像滚动速度比其他任何东西都慢

javascript - 如何在android PhoneGap中加载动态div的iscroll