Появление элементов при скролле
Всем привет. Подскажите пожалуйста, как сделать появление элементов
при скролле. Элементов много, у всех один и тот же класс, и каждому нужно добавить другой класс. Все это должно работать, когда элемент в поле видимости. У меня сейчас работает не так. Когда первый элемент появился в зоне видимости, то классы добавились ко всем остальным элементам.
function scrollTracking(){
var element = $('.scroll-js');
var wt = $(window).scrollTop();
var wh = $(window).height();
var et = element.offset().top;
var eh = element.outerHeight();
var dh = $(document).height();
var ww = $(window).width();
if ((wt + wh >= et || wh + wt == dh || eh + et < wh) && ww > 1024){
for( var i = 0; i < element.length; i++) {
element.addClass('scroll-js--active')
}
}
}
$(window).scroll(function(){
scrollTracking();
});
//- 1 блок
.container.block.wrapper
.bg.scroll-js
svg
img(alt="image" src="img/img.jpg" loading="lazy")
//- 2 блок
ul.info__list.effect.scroll-js
li.info__items.items
.items__heading
.items__text
li.info__items.items
.items__heading
.items__text
li.info__items.items
.items__heading
.items__text
li.info__items.items
.items__heading
.items__text
//-3 блок такой же как первый
// 1 блок
.bg {
position: absolute;
left: -100%;
bottom: 0;
display: block;
transition: all .8s ease-out;
svg {
width: 350px;
height: 200px;
}
}
.scroll-js--active {
left: 0;
}
// 2 блок
.info__items {
opacity:0;
&:nth-child(2) {
transition-delay: .8s;
}
&:nth-child(3) {
transition-delay: 1.6s;
}
&:nth-child(4) {
transition-delay: 2.4s;
}
}
.scroll-js--active .info__items{
opacity: 1;
}
|
|
К сожаление, то что вы предлагаете, не работает в IE, а нужно
|
seven8959,
делайте цикл по элементам, и у каждого проверяйте видимость. |
Не совсем понял, сначала цикл, которые у меня? В этом цикле условие if(Так же которое у меня) и после условия вешаем класс?
|
seven8959,
примерно так.
var elements = $('.scroll-js');
$(window).scroll(function() {
elements.each(function(indx, el) {
var visibility = checkViewport(el);
if(visibility) $(el).addClass('scroll-js--active');
});
|
(((Что то не помогло
|
seven8959,
где минимальный код целиком?Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
seven8959,
сделано для ie. если что не так, делайте похожий макет со своими html и css.
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.grid-container {
height: 300px;
overflow: hidden;
background-color: #0000FF;
margin: 10px auto;
width: 400px;
display: block;
}
.grid-container__col-1 {
height: 300px;
width: 100px;
border: 1px solid red;
transform: translateY(50%);
opacity: 0;
background-color: #FF1493;
box-sizing: border-box;
float: left;
}
.grid-container.animate .grid-container__col-1 {
transform: translateY(0px);
opacity: 1;
transition: 1.2s;
transition-delay: 0ms;
}
section {
height: 100vh;
}
</style>
<script>
document.addEventListener("DOMContentLoaded", function() {
let container = document.querySelectorAll('.grid-container');
[].forEach.call(container, function(div) {
let children = div.querySelectorAll('.grid-container__col-1');
let length = children.length;
[].forEach.call(children, function(el, i) {
el.style.setProperty('transition-delay', (i * 1800 / length) + 'ms')
})
})
function anim() {
[].forEach.call(container, function(div) {
checkViewport(div) && div.classList.add("animate")
});
}
function checkViewport(a) {
var b = a.getBoundingClientRect();
return 0 < b.top && b.top + b.height < window.innerHeight
};
window.addEventListener("scroll", anim, false);
anim()
});
</script>
</head>
<body>
<section></section>
<div class="products-wrapper__grid-container grid-container">
<!-- column-1 -->
<div class="grid-container__col grid-container__col-1">some content</div>
<!-- column-2 -->
<div class="grid-container__col grid-container__col-1">some content</div>
<!-- column-3 -->
<div class="grid-container__col grid-container__col-1">some content</div>
<!-- column-4 -->
<div class="grid-container__col grid-container__col-1">some content</div>
</div>
<div class="products-wrapper__grid-container grid-container">
<!-- column-1 -->
<div class="grid-container__col grid-container__col-1">some content</div>
<!-- column-2 -->
<div class="grid-container__col grid-container__col-1">some content</div>
<!-- column-3 -->
<div class="grid-container__col grid-container__col-1">some content</div>
<!-- column-4 -->
<div class="grid-container__col grid-container__col-1">some content</div>
</div>
<div class="products-wrapper__grid-container grid-container">
<!-- column-1 -->
<div class="grid-container__col grid-container__col-1">some content</div>
<!-- column-2 -->
<div class="grid-container__col grid-container__col-1">some content</div>
<!-- column-3 -->
<div class="grid-container__col grid-container__col-1">some content</div>
<!-- column-4 -->
<div class="grid-container__col grid-container__col-1">some content</div>
</div>
<section></section>
</body>
</html>
|
Спасибо конечно, но так то это и было все мое.
|
| Часовой пояс GMT +3, время: 11:56. |