首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >视差滚动:层与层之间不需要的间隙

视差滚动:层与层之间不需要的间隙
EN

Stack Overflow用户
提问于 2018-01-18 03:44:36
回答 1查看 287关注 0票数 1

在我的网站here上,我用CSS和Javascript实现了多层视差滚动。页面上下滚动,我有6层都在视差中移动。后退的每一层的滚动速度都比前一层稍微慢一些。

在我单击右上角的汉堡包菜单之前,这个实现一直有效。

Image of the Bug

我不确定为什么当幻灯片菜单弹出时,这些层不能正确地堆叠在一起。

下面是用于视差滚动的CSS:

代码语言:javascript
复制
.layer {
  background-position: bottom center;
  background-size: auto;
  background-repeat: no-repeat;
  width: 100%;
  height: 800px;
  position: fixed;
  z-index: -1;
}

.layer-bg {
  background-image: url("http://www.reynelee.com/wp-content/uploads/2017/12/layer1.png");
}

.layer-1 {
  background-image: url("http://www.reynelee.com/wp-content/uploads/2017/12/layer2.png\a     ");
  background-position: left bottom;
}

.layer-2 {
  background-image: url("http://www.reynelee.com/wp-content/uploads/2017/12/layer3.png");
}

.layer-3 {
  background-image: url("http://www.reynelee.com/wp-content/uploads/2017/12/layer4.png\a    ");
  background-position: right bottom;
}

下面是JS:

代码语言:javascript
复制
(function() {
  window.addEventListener('scroll', function(event) {
    var depth, i, layer, layers, len, movement, topDistance, translate3d;
    topDistance = this.pageYOffset;
    layers = document.querySelectorAll("[data-type='parallax']");
    for (i = 0, len = layers.length; i < len; i++) {
      layer = layers[i];
      depth = layer.getAttribute('data-depth');
      movement = -(topDistance * depth);
      translate3d = 'translate3d(0, ' + movement + 'px, 0)';
      layer.style['-webkit-transform'] = translate3d;
      layer.style['-moz-transform'] = translate3d;
      layer.style['-ms-transform'] = translate3d;
      layer.style['-o-transform'] = translate3d;
      layer.style.transform = translate3d;
    }
  });

}).call(this);

HTML:

代码语言:javascript
复制
<div id='hero'>
  <div class='layer-bg layer' data-depth='0.10' data-type='parallax'></div>
  <div class='layer-1 layer' data-depth='0.20' data-type='parallax'></div>
  <div class='layer-2 layer' data-depth='0.50' data-type='parallax'></div>
  <div class='layer-3 layer' data-depth='0.80' data-type='parallax'></div>
  <div class='layer-overlay layer' data-depth='0.85' data-type='parallax'></div>
<!--   <div class='layer-4 layer' data-depth='0.90' data-type='parallax'></div> -->
  <div class='layer-logo layer' data-depth='0.95' data-type='parallax'> <a id='portfolio-button' href="http://www.reynelee.com/my-work/">View Work</a></div> <!-- my logo-->
<!--   <div class='layer-close layer' data-depth='1.00' data-type='parallax'></div> -->

</div>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-18 04:06:52

问题是由transform css属性引起的。例如,如果您应用以下规则:

代码语言:javascript
复制
#page {
  transform: translateX(0);
}

您将注意到,如果没有打开菜单,则会导致相同的问题。我以前遇到过这种情况,我忘记了术语的实际名称,但应用transform会导致浏览器以某种方式对其进行不同的处理。我的建议是在# translateX(0)元素上应用这个页面,并根据这个默认位置重新计算视差div的位置。我知道这不是一个完整的答案,但它应该会让你振作起来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48308832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档