Как выполнить добавление класса в один элемент за раз (WayPoints) - PullRequest
0 голосов
/ 23 мая 2019

У меня есть этот красивый список прокрутки Waypoint.js, который, когда вы прокручиваете вниз и нажимаете определенный процент от цели (окна), он меняет стиль шрифта и добавляет стрелку к элементу списка.

Вправотеперь он добавляет стрелку к каждому предмету на пути вниз и удаляет его из каждого предмета на пути вверх.

Я хотел бы знать, есть ли способ сказать «только по одному за раз»каким-то образом это позволило бы элементам изменяться, но только по одному за раз (т. е. добавляется одна стрелка (шрифт потрясающий), а одна гарнитура шрифта изменяется за раз).

По существу, "не добавляйтеэтот класс более чем к одному за раз, и добавляйте его, только если вы удалите его из предыдущего, прокручивая его вниз (надеюсь, это имеет смысл!)

Я пытался изменить его на toggleClass и удалить классиз .siblings (), который работает, но поскольку это несколько списков, он не работает.Последний элемент в каждом ul содержит стрелку (я покажу пример ниже).

Вот веб-сайт, на котором вы можете видеть, как он работает с правильными стилями, и стрелки показывают: Если вы прокрутите эту страницу вниз доВ разделе НАШ ПРОЦЕСС вы увидите, над чем я работаю: small_smile:

https://stable.stable -demos.com / what-we-do /

Также обратите вниманиеЯ знаю, что могу сделать эту работу с siblings (), за исключением того, что эти списки должны быть разбиты на разные ul, потому что они нужны нам для правильного объединения в стек для мобильных устройств.

Спасибо за вашу помощь!

jQuery(function($){

// WHAT WE DO - ACTIVATE LIST AS SCROLL BY CHANGE FONT
	var continuousElements = document.getElementsByClassName("waypoint")
		for (var i = 0; i < continuousElements.length; i++) {
			new Waypoint({
			element: continuousElements[i],
			handler: function(direction) {

					if (direction === "down") {

						console.log(this.element.innerHTML + "down");
						$(this.element).addClass("gray active");
						$(this.element).removeClass("black");

					} else if (direction === "up") { 

						console.log(this.element.innerHTML + "up");
						$(this.element).addClass("black");
						$(this.element).removeClass("gray active");

					}
				}, offset: "50%"
			});

		}

}); // End jQuery
/* What we do Highlight Text */
.black {
	color: black!important;
}
.gray {
	color: black!important;
}
.gray.active:before {
  font-family: "Font Awesome 5 Free";
	content: "\f061";
	padding-right: 10px;
}
.c-logo img {
	width: 80%;
}

.list-wrap div {
	text-transform: uppercase;
	padding: 8px 0;
	text-align: center;
	color: black;
	font-family: 'space_grotesksemibold';
}
.list-wrap div.active,
.list-wrap div:hover {
	color: black;
	font-family: 'gt_sectra_fineblack_italic';
	cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/waypoints/4.0.1/jquery.waypoints.min.js"></script>
<div style="min-height: 2000px;">
    <div id="listWrap" class="list-wrap">
    	<div class="continuous-true waypoint">We Think.</div>
    	<div class="continuous-true waypoint">We Research.</div>
    	<div class="continuous-true waypoint">We Involve.</div>
    </div>
    <div id="listWrap" class="list-wrap">
    	<div class="continuous-true waypoint">We Stragegize.</div>
    	<div class="continuous-true waypoint">We Plan.</div>
    	<div class="continuous-true waypoint">We Analyze.</div>
    </div> 
    <div id="listWrap" class="list-wrap">
    	<div class="continuous-true waypoint">We Ideate.</div>
    	<div class="continuous-true waypoint">We Design.</div>
    	<div class="continuous-true waypoint">We Create.</div>
    </div>
    <div id="listWrap" class="list-wrap">
    	<div class="continuous-true waypoint">We Test.</div>
    	<div class="continuous-true waypoint">We Adapt.</div>
    	<div class="continuous-true waypoint">We Execute.</div>
    </div>
    <div id="listWrap" class="list-wrap">
    	<div class="continuous-true waypoint">We Report.</div>
    	<div class="continuous-true waypoint">We Learn.</div>
    	<div class="continuous-true waypoint">We Improve.</div>
    </div>
</div>

С братьями и сестрами ():

jQuery(function($){

    // WHAT WE DO - ACTIVATE LIST AS SCROLL BY CHANGE FONT
    	var continuousElements = document.getElementsByClassName("waypoint")
    		for (var i = 0; i < continuousElements.length; i++) {
    			new Waypoint({
    			element: continuousElements[i],
    			handler: function(direction) {

    					if (direction === "down") {

    						console.log(this.element.innerHTML + "down");
    						$(this.element).addClass("gray active").siblings().removeClass('active');;
    						$(this.element).removeClass("black");

    					} else if (direction === "up") { 

    						console.log(this.element.innerHTML + "up");
    						$(this.element).addClass("black");
    						$(this.element).removeClass("gray active");

    					}
    				}, offset: "50%"
    			});

    		}

    }); // End jQuery
 /* What we do Highlight Text */

    .black {
    	color: black!important;
    }
    .gray {
    	color: black!important;
    }
    .gray.active:before {
      font-family: "Font Awesome 5 Free";
    	content: "\f061";
    	padding-right: 10px;
    }
    .c-logo img {
    	width: 80%;
    }

    .list-wrap div {
    	text-transform: uppercase;
    	padding: 8px 0;
    	text-align: center;
    	color: black;
    	font-family: 'space_grotesksemibold';
    }
    .list-wrap div.active,
    .list-wrap div:hover {
    	color: black;
    	font-family: 'gt_sectra_fineblack_italic';
    	cursor: pointer;
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/waypoints/4.0.1/jquery.waypoints.min.js"></script>
<div style="min-height: 2000px;">
    <div id="listWrap" class="list-wrap">
    	<div class="continuous-true waypoint">We Think.</div>
    	<div class="continuous-true waypoint">We Research.</div>
    	<div class="continuous-true waypoint">We Involve.</div>
    </div>
    <div id="listWrap" class="list-wrap">
    	<div class="continuous-true waypoint">We Stragegize.</div>
    	<div class="continuous-true waypoint">We Plan.</div>
    	<div class="continuous-true waypoint">We Analyze.</div>
    </div> 
    <div id="listWrap" class="list-wrap">
    	<div class="continuous-true waypoint">We Ideate.</div>
    	<div class="continuous-true waypoint">We Design.</div>
    	<div class="continuous-true waypoint">We Create.</div>
    </div>
    <div id="listWrap" class="list-wrap">
    	<div class="continuous-true waypoint">We Test.</div>
    	<div class="continuous-true waypoint">We Adapt.</div>
    	<div class="continuous-true waypoint">We Execute.</div>
    </div>
    <div id="listWrap" class="list-wrap">
    	<div class="continuous-true waypoint">We Report.</div>
    	<div class="continuous-true waypoint">We Learn.</div>
    	<div class="continuous-true waypoint">We Improve.</div>
    </div>
</div>

1 Ответ

0 голосов
/ 23 мая 2019

Во-первых, у вас есть несколько элементов с одинаковым Id (listWrap), вы можете удалить его, а затем добавить имя класса в родительский div (.list-wrap-container).

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/waypoints/4.0.1/jquery.waypoints.min.js"></script>
<div style="min-height: 2000px;" class='list-wrap-container'>
    <div class="list-wrap">
        <div class="continuous-true waypoint">We Think.</div>
        <div class="continuous-true waypoint">We Research.</div>
        <div class="continuous-true waypoint">We Involve.</div>
    </div>
    <div class="list-wrap">
        <div class="continuous-true waypoint">We Stragegize.</div>
        <div class="continuous-true waypoint">We Plan.</div>
        <div class="continuous-true waypoint">We Analyze.</div>
    </div> 
    <div class="list-wrap">
        <div class="continuous-true waypoint">We Ideate.</div>
        <div class="continuous-true waypoint">We Design.</div>
        <div class="continuous-true waypoint">We Create.</div>
    </div>
    <div class="list-wrap">
        <div class="continuous-true waypoint">We Test.</div>
        <div class="continuous-true waypoint">We Adapt.</div>
        <div class="continuous-true waypoint">We Execute.</div>
    </div>
    <div class="list-wrap">
        <div class="continuous-true waypoint">We Report.</div>
        <div class="continuous-true waypoint">We Learn.</div>
        <div class="continuous-true waypoint">We Improve.</div>
    </div>
</div>

// jsкод

jQuery(function($){

    // WHAT WE DO - ACTIVATE LIST AS SCROLL BY CHANGE FONT
        var continuousElements = document.getElementsByClassName("waypoint")
            for (var i = 0; i < continuousElements.length; i++) {
                new Waypoint({
                element: continuousElements[i],
                handler: function(direction) {
                        // select the parent container
                        $(this.element).parent('.list-wrap-container').find('.gray.active').removeClass('gray active');

                        if (direction === "down") {

                            console.log(this.element.innerHTML + "down");
                            $(this.element).addClass("gray active").siblings().removeClass('active');;
                            $(this.element).removeClass("black");

                        } else if (direction === "up") { 

                            console.log(this.element.innerHTML + "up");
                            $(this.element).addClass("black");
                            $(this.element).removeClass("gray active");

                        }
                    }, offset: "50%"
                });

            }

    }); // End jQuery

// надеюсь, это поможет

...