Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.02.2020, 10:56
Аватар для LADYX
Профессор
Отправить личное сообщение для LADYX Посмотреть профиль Найти все сообщения от LADYX
 
Регистрация: 19.02.2015
Сообщений: 219

Переписать код
Здравствуйте. Есть у меня такой код на jQuery. А как можно его же написать, но только на нативном JavaScript?
$(document).ready(function() {
  var list = $(".wrapper-boxes .box");
  var numToShow = 10;
  var button = $("button");
  var numInList = list.length;
  list.hide();
  if (numInList > numToShow) {
    button.show();
  }
  list.slice(0, numToShow).show();
  button.click(function() {
    var showing = list.filter(':visible').length;
    list.slice(showing - 1, showing + numToShow).fadeIn();
    var nowShowing = list.filter(':visible').length;
    if (nowShowing >= numInList) {
      button.hide();
    }
  });
});
Ответить с цитированием
  #2 (permalink)  
Старый 20.02.2020, 11:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

LADYX,
Скрыть элементы больше чем ...
Ответить с цитированием
  #3 (permalink)  
Старый 20.02.2020, 13:31
Аватар для LADYX
Профессор
Отправить личное сообщение для LADYX Посмотреть профиль Найти все сообщения от LADYX
 
Регистрация: 19.02.2015
Сообщений: 219

рони,
Сообщение от рони
Скрыть элементы больше чем ...
Это другое, там показать/спрятать.
А у меня скрипт по кнопке выводит по N элементов. И когда уже все элементы показаны, кнопка скрывается.
Ответить с цитированием
  #4 (permalink)  
Старый 20.02.2020, 14:33
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Cтранно смншивать show/hide и fadeIn
Это, насколькоя я помню, немного разные вещи.
fadeIn делает элемент непрозрачным
А show/hide показывают/убирают через display:
Но, как написано, так и перевожу

Определить дополнительно стили

/*Многие современные браузеры используют это по умолчанию, но лишним не будет*/
[hidden] {
  display:none;
}

.fadein {
  opacity: 1;
}


document.addEventListener("DOMContentLoaded", () => {
  let list = document.querySelectorAll(".wrapper-boxes .box")
  var numToShow = 10;
  var button = document.querySelectorAll("button");
  var numInList = list.length;
  list.forEach(el => el.hidden = true)
  if (numInList > numToShow) {
//    button.show();  // ??? А как они были скрыты
// Если через hidden то
       button.forEach(el => el.hidden = false)   
  }
  list.slice(0, numToShow).forEach(el => el.hidden = false);
  button.forEach(el => {
    el.addEventListener("click", () => {
      var showing = document.querySelectorAll('.wrapper-boxes .box:visible').length
	  list.slice(showing - 1, showing + numToShow).forEach(el => el.classList.add('fadein'));
      var nowShowing = document.querySelectorAll('.wrapper-boxes .box:visible').length
      if (nowShowing >= numInList) {
        button.forEach(el => el.hidden = true)
      }
    })  
  })
})
Ответить с цитированием
  #5 (permalink)  
Старый 20.02.2020, 15:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от voraa
Cтранно смншивать show/hide и fadeIn
Это, насколькоя я помню, немного разные вещи.
почти одинаковые.

Последний раз редактировалось рони, 20.02.2020 в 15:17.
Ответить с цитированием
  #6 (permalink)  
Старый 20.02.2020, 15:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

LADYX,
структуру html неплохо было бы показать.
Ответить с цитированием
  #7 (permalink)  
Старый 20.02.2020, 17:47
Аватар для LADYX
Профессор
Отправить личное сообщение для LADYX Посмотреть профиль Найти все сообщения от LADYX
 
Регистрация: 19.02.2015
Сообщений: 219

рони,
Сообщение от рони
структуру html неплохо было бы показать.
А вот она:
<style>
.wrapper-boxes {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
}

.box {
  position: relative;
  margin: 5px;
  width: 10px;
  height: 10px;
  background-color: black;
}
</style>
<div class="wrapper-boxes">
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
</div>
<button>Ещё</button>

Элементов .box естественно может быть много
Ответить с цитированием
  #8 (permalink)  
Старый 20.02.2020, 17:52
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от рони Посмотреть сообщение
почти одинаковые.
Почти.
Выглядит так.
Посмотрите код jquery.
show/hide, если не заданы параметры меняют display:
fadeIn даже без параметров меняет opacity:
Только без параметров это делается мгновенно, без анимации.
Ответить с цитированием
  #9 (permalink)  
Старый 20.02.2020, 19:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

voraa,
все эти методы меняют и display и opacity, без параметров "мгновенно" это 400ms.
есть разница, но в этом они одинаковы.
Ответить с цитированием
  #10 (permalink)  
Старый 20.02.2020, 20:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

LADYX,
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style>
.wrapper-boxes {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
}

.box {
  position: relative;
  margin: 5px;
  width: 10px;
  height: 10px;
  background-color: black;
}
.box.nextstop ~ .box {
    display: none;
}
 </style>

  <script>
document.addEventListener( "DOMContentLoaded" , function() {
  const limit = 5;
  const nextOpen = (wrapper, button) => {
  const boxs = wrapper.querySelectorAll(".box"),
        len = boxs.length - 2,
        endBox = wrapper.querySelector(".nextstop"),
        index = [...boxs].indexOf(endBox) + limit;
        if(endBox) endBox.classList.remove("nextstop");
        if(index < len) boxs[index].classList.add("nextstop");
        else button.remove()
  }
  document.querySelectorAll(".wrapper-boxes").forEach(wrapper => {
  const button = wrapper.nextElementSibling;
        button.addEventListener("click", nextOpen.bind(null,wrapper, button));
        nextOpen(wrapper, button);
  })
 });
  </script>
</head>
<body>

<div class="wrapper-boxes">
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
</div>
<button>Ещё</button>

<div class="wrapper-boxes">
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
</div>
<button>Ещё</button>

<div class="wrapper-boxes">
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
</div>
<button>Ещё</button>
</body>
</html>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не соображу как переписать код js в jquery Fomax Элементы интерфейса 1 12.10.2016 01:20
Как найти и заменить код скрипта на странице на другой код? smls Общие вопросы Javascript 2 18.07.2016 22:01
"Оживите" код с хабра - https://habrahabr.ru/sandbox/51453/ Daniil2206 Node.JS 0 11.05.2016 18:09
Нужно Переписать код на NODE.JS koshak01 Node.JS 0 28.01.2016 12:11
Требуется выводить код рекламного блока Adsense из файла JavaScript??? speedflow Элементы интерфейса 0 26.05.2012 15:50