При прокрутке Windows добавить класс в ближайший селектор

Я пытаюсь добавить класс, когда будет отображаться изображение. 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>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
74
2

Ответы 2

Вы можете использовать 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/

Спасибо за Ваш ответ. Я попытался добавить класс к изображению. потом трясется. Можете ли вы проверить это. jsfiddle.net/6p2hwe8x/3

Lemon Kazi 12.11.2018 16:03

Функция проверки того, присутствует ли элемент в области просмотра или нет. 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, но мне нужно получать их один за другим при прокрутке

Lemon Kazi 12.11.2018 16:12

Это было так. но он добавляет и удаляет класс, поэтому его трясет. не могли бы вы проверить jsfiddle.net/zvy4508q/1

Lemon Kazi 12.11.2018 16:24

Вместо идентификаторов вы можете вести список элементов по каждой странице, которые вам нужно отслеживать и рассчитывать соответствующим образом.

front_end_dev 12.11.2018 16:25

Вы можете использовать debounce, чтобы ваша функция прокрутки не вызывалась часто. Я обновил вашу скрипку - jsfiddle.net/zvy4508q/2. Подробнее о debounce - davidwalsh.name/javascript-debounce-function

front_end_dev 12.11.2018 16:30

Другие вопросы по теме