@Patrik420

Кнопка фильтр работает не правильно?

Вот сценарий. Сайт перезагружен, все элементы показаны(не отфильтрованы) нажимаю на кнопку-фильтр например Машины, видно что класс добавляется , НО реакции нету не фильтруются элементы, после ВТОРОГО нажатия, когда класс удаляется ВОТ тогда отфильтрованные элементы появляются и вот так КНОПКА-ФИЛЬТР фильтрует задом наперёд. Когда класс добавлен>фильтр сбрасывается, когда класс удален> отфильтрованные элементы появляются. Помогите пожалуйста и спасибо за понимание
filterSelection("all")
function filterSelection(c) {
  var x, i;
  x = document.getElementsByClassName("filterDiv");
  if (c == "all" || document.getElementsByClassName("active-fltr").length == 0) c = "";
  // Добавить класс "show" (display:block) к отфильтрованным элементам и удалите класс "show" из элементов, которые не выбраны
  for (i = 0; i < x.length; i++) {
    w3RemoveClass(x[i], "show");
    if (x[i].className.indexOf(c) > -1) w3AddClass(x[i], "show");
  }
}

// Показать отфильтрованные элементы
function w3AddClass(element, name) {
  var i, arr1, arr2;
  arr1 = element.className.split(" ");
  arr2 = name.split(" ");
  for (i = 0; i < arr2.length; i++) {
    if (arr1.indexOf(arr2[i]) == -1) {
      element.className += " " + arr2[i];
    }
  }
}

// Скрыть элементы, которые не выбраны
function w3RemoveClass(element, name) {
  var i, arr1, arr2;
  arr1 = element.className.split(" ");
  arr2 = name.split(" ");
  for (i = 0; i < arr2.length; i++) {
    while (arr1.indexOf(arr2[i]) > -1) {
      arr1.splice(arr1.indexOf(arr2[i]), 1);
    }
  }
  element.className = arr1.join(" ");
}

// Добавить активный класс к текущей кнопке управления (выделите ее)
var btnContainer = document.getElementById("myBtnContainer");
var btns = btnContainer.getElementsByClassName("btn-fltr");
for (var i = 0; i < btns.length; i++) {
  btns[i].addEventListener("click", function() {
    var current = document.getElementsByClassName("active-fltr");
    if (current.length > 0 && current[0] !== this) {
      current[0].className = current[0].className.replace("active-fltr", "");
    }
    if (this.classList.contains("active-fltr")) {
      this.classList.remove("active-fltr");
    } else {
      this.classList.add("active-fltr");
    }
    
  });
}

.container-fltr{
	overflow: hidden;
	flex-basis: 100%;
	display: flex;
	
}
.filterDiv {
	float: left;
	background-color: #2196F3;
	color: #ffffff;
	width: 100px;
	line-height: 100px;
	text-align: center;
	margin: 2px;
	display: none; /* Скрыто по умолчанию */
  }
  
  /* В класс "show" добавляется к отфильтрованные элементы */
  .show {
	display: block;
  }
  
  /* Стиль кнопок */
  .btn-fltr {
	padding: 12px 16px;
	background-color: #fff;
	cursor: pointer;
	border-radius: 99px;
	border: 2px solid transparent
  }
  
  /* Добавить светло-серый фон на наведении курсора мыши */
  .btn-fltr:hover {

  }
  
  /* Добавить темный фон для активной кнопки */
  .active-fltr {
	background: #FFFFFF;
	box-shadow: 4px 4px 20px rgba(0, 0, 0, 0.1);
	border-radius: 99px;
	box-sizing: border-box !important; 
	border: 2px solid #44AF69;
  }

<div id="myBtnContainer">
                    <button class="btn btn-fltr " onclick="filterSelection('cars')"> Машины</button>
                    <button class="btn btn-fltr " onclick="filterSelection('animals')"> Животные</button>
                    <button class="btn btn-fltr " onclick="filterSelection('fruits')"> Фрукты</button>
                    <button class="btn btn-fltr " onclick="filterSelection('colors')"> Цветы</button>
                  </div>
                  <div class="container-fltr">
                    <div class="filterDiv cars">БМВ</div>
                    <div class="filterDiv colors">Апельсин</div>
                    <div class="filterDiv cars">Вольво</div>
                    <div class="filterDiv colors">Красный</div>
                    <div class="filterDiv cars ">Мустанг</div>
                    <div class="filterDiv colors">Синий</div>
                    <div class="filterDiv animals">Кот</div>
                    <div class="filterDiv animals">Собака</div>
                    <div class="filterDiv fruits">Арбуз</div>
                    <div class="filterDiv fruits ">Киви</div>
                    <div class="filterDiv fruits">Банан</div>
                    <div class="filterDiv fruits">Лимон</div>
                    <div class="filterDiv animals">Корова</div>
                  </div>
  • Вопрос задан
  • 59 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы