Запустить функцию для каждого повторного класса на той же странице - PullRequest
0 голосов
/ 25 мая 2018

Я создал следующую функциональность, где изображение фиксируется слева при прокрутке контента и появляется цитата для нескольких пикселей.

Все работает нормально, единственная проблема заключается в том, что яЯ хотел бы добавить это много раз на одной и той же странице, и, как есть, он просто работает с первым изображением.

Второе не фиксируется при прокрутке, а цитата сохраняет скрытую ...

Как я могу запустить эту функцию для каждого изображения?

Это рабочий пример

HTML:

<section id="cont_quote" class="maxwidth">
    <article class="cont_q hasImage">
        <p>Content</p>
        <img class="alignleft img_quote" src="/large.jpg" alt="" width="433" height="553" />
       <blockquote>
          <h3>Why this training plan works</h3>
       </blockquote>
       <p>Content</p>
    </article>
</section>

JS:

// Stick image on scroll 
    $(window).on('load resize', function () {
        if ($(window).width() >= 769) {
          var $element = $('#cont_quote');
          var $follow = $element.find('.img_quote');
          var followHeight = $element.find('.img_quote').outerHeight();
          var height = $element.outerHeight() - 300;
          var window_height = $(window).height();

          $(window).scroll(function () {
            var pos = $(window).scrollTop();
            var top = $element.offset().top;

            // Check if element is above or totally below viewport
            if (top + height - followHeight < pos || top > pos + window_height) {
              return;
            }

            var offset = parseInt($(window).scrollTop() - top);

            if (offset > 0) {
            $follow.css('transform', 'translateY('+ offset +'px)');
            }

          })
        }
    });


    // Quote show on viewport
    function inViewport( element, viewport = { top: 0, bottom: innerHeight } ){

      // Get the elements position relative to the viewport

      var bb = element.getBoundingClientRect();

      // Check if the element is outside the viewport
      // Then invert the returned value because you want to know the opposite

      return !(bb.top > viewport.bottom || bb.bottom < viewport.top);

    }

    var myViewport = { top: innerHeight * .5, bottom: innerHeight * .6 };
    var myElement = document.querySelector( '#cont_quote blockquote' );

    // Listen for the scroll event

    document.addEventListener( 'scroll', event => {


    // Check the viewport status
    if( $(window).width() >= 600 ){

      if( inViewport( myElement, myViewport ) && $('.cont_q').hasClass('hasImage') ) {

        if( $(window).width() >= 769 ){
          myElement.style.opacity = 1;
          myElement.style.left = '-25%';

        } else {
          myElement.style.opacity = 1;
          myElement.style.left = '-5%';
        }

       } else if( inViewport( myElement, myViewport )) {

        if( $(window).width() >= 769 ){
          myElement.style.opacity = 1;
          myElement.style.left = '-15%';

        } else {
          myElement.style.opacity = 1;
          myElement.style.left = '13%';
        }

      } else {

        myElement.style.opacity = 0;
        myElement.style.left = '-40%';
      }   

    } else {

        myElement.style.opacity = 1;
        myElement.style.left = '5%';
    } 

    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...