淡出每个元素 - 滚动

时间:2018-03-05 22:08:27

标签: javascript jquery

如何在each元素上应用淡入淡出与高度相比而不是整体?

HTML:

<div class="test fade"></div>

CSS:

* {
    padding: 0;
    margin: 0;
    box-sizing: border-box;
}

body {
    font: 1em 'Open Sans', sans-serif;
}

.test {
    height: 70vh;
    width: 30%;
    background-color: rgba(0, 0, 0, 0.6);
    margin: 1em auto;
}

JS:

var $elem = $('.test.fade');
for (var i = 0; i <= 5; i++) {
    $elem.clone().appendTo('body');
}
$(window).scroll(function() {
    var percent = $(this).scrollTop() / ($(document).height() - $(this).height());
    $('.fade').each(function() {
        $(this).css('opacity', 1 - percent);
    });
});

jsfiddle

1 个答案:

答案 0 :(得分:1)

我建议使用Element.getBoundingClientRect()来计算元素相对于视口的位置。

使用相对于视口的位置,您可以计算视口外部的百分比,并将其用作opacity(转换为0-1值后):

var $elem = $('.test.fade');
for (var i = 0; i <= 5; i++) {
    $elem.clone().appendTo('body');
}
$(window).scroll(function() {
  $('.fade').each(function() {
    var bounds = this.getBoundingClientRect();
    var op = Math.max((bounds.height + Math.min(bounds.top, 0)) / bounds.height, 0);
    $(this).css('opacity', op);
  });
});

Demo JSFiddle here