Я пытаюсь добавить класс, когда будет отображаться изображение. JSFIDDLE
Здесь у меня два изображения. Я пытаюсь добавить класс, когда любое изображение будет на экране. Теперь добавляем только первое изображение. Я попытался проверить closest (), но не получил никакого значения
function isScrolledIntoView(elem) {
var docViewTop = $(window).scrollTop();
var docViewBottom = docViewTop + $(window).height();
var elemTop = $(elem).offset().top;
return ((elemTop <= docViewBottom) && (elemTop >= docViewTop));
}
$(window).scroll(function(){
if (isScrolledIntoView('.box')) {
console.info($(this).find('img').html());
$('img').addClass('animated flip').css('background', 'red');
//added background red so you can see it has triggered
}
else {
$('img').removeClass('animated flip');
}
});.col-md-12 {
height: 1500px;
padding-top: 1000px;
}
.box{
position:relative;
}
.animated {
opacity: 1;
visibility: visible;
transition: opacity 1s 0s, visibility 1s 0s;
z-index: 2;
position: fixed;
top: 0;
left: 0;
}
.rad-slideshow-item {
/* position: relative; */
}
.rad-slideshow-item .rad-asset-wrapper {
display: block;
padding: 0;
position: absolute;
top: 0;
left: 0;
overflow: hidden;
z-index: 3;
}
.animated .rad-slideshow-item.active-adjacent div.rad-asset-wrapper {
background: #000;
opacity: 0;
visibility: hidden;
position: fixed;
top: 0;
left: 0;
transition: opacity 0s 0s, visibility 0s 0s;
z-index: 1;
display: none;
}
.animated .rad-slideshow-item.active-adjacent div.rad-asset-wrapper {
display: block;
transform: translate3d(0, 0, 0);
transition: opacity 0s 1s, visibility 0s 1s;
}
.rad-spinner {
position: absolute;
top: 50%;
left: 50%;
z-index: 2;
transform: translate3d(-50%, -50%, 0);
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div class = "col-md-12 ">
<div class = "box">
<img src = "https://dummyimage.com/800x800" class = "icon"/>
<div class = "rad-slideshow-item active-adjacent">
<div class = "rad-asset-wrapper">
<h1>WEB<br/>DESIGN</h1>
</div>
</div>
</div>
<div class = "box">
<img src = "https://dummyimage.com/800x800" class = "icon"/>
<div class = "rad-slideshow-item active-adjacent">
<div class = "rad-asset-wrapper">
<h1>WEB<br/>DESIGN</h1>
</div>
</div>
</div>
</div>


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать ScrollMonitor
var el = $(".box");
var watcher = scrollMonitor.create( el );
watcher.enterViewport(function() {
console.info( 'I have entered the viewport' );
el.addClass('animated flip').css('background', 'red');
});
watcher.exitViewport(function() {
console.info( 'I have left the viewport' );
el.removeClass('animated flip').css('background', 'none');
});
http://jsfiddle.net/6p2hwe8x/2/
Функция проверки того, присутствует ли элемент в области просмотра или нет. elementInViewport был взят из этого SO_Answer. Ищите больше понимания.
function elementInViewport(el) {
var top = el.offsetTop;
var left = el.offsetLeft;
var width = el.offsetWidth;
var height = el.offsetHeight;
while(el.offsetParent) {
el = el.offsetParent;
top += el.offsetTop;
left += el.offsetLeft;
}
return (
top < (window.pageYOffset + window.innerHeight) &&
left < (window.pageXOffset + window.innerWidth) &&
(top + height) > window.pageYOffset &&
(left + width) > window.pageXOffset
);
}
jsFiddle демонстрирует состояние элемента console.info, если он присутствует в области просмотра.
Спасибо за Ваш ответ . здесь вы разместили id. Это нормально. Проблема в том, как получить этот идентификатор, если мой html отличается в другом месте. вроде как-то ставят 2 изображения. около 3 изображений. Каким-то образом я могу добавить идентификатор на 1/2/3, но мне нужно получать их один за другим при прокрутке
Это было так. но он добавляет и удаляет класс, поэтому его трясет. не могли бы вы проверить jsfiddle.net/zvy4508q/1
Вместо идентификаторов вы можете вести список элементов по каждой странице, которые вам нужно отслеживать и рассчитывать соответствующим образом.
Вы можете использовать debounce, чтобы ваша функция прокрутки не вызывалась часто. Я обновил вашу скрипку - jsfiddle.net/zvy4508q/2. Подробнее о debounce - davidwalsh.name/javascript-debounce-function
Спасибо за Ваш ответ. Я попытался добавить класс к изображению. потом трясется. Можете ли вы проверить это. jsfiddle.net/6p2hwe8x/3