Переписать код
Здравствуйте. Есть у меня такой код на 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();
}
});
});
|
|
рони,
Цитата:
А у меня скрипт по кнопке выводит по N элементов. И когда уже все элементы показаны, кнопка скрывается. |
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)
}
})
})
})
|
Цитата:
|
LADYX,
структуру 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 естественно может быть много |
Цитата:
Выглядит так. Посмотрите код jquery. show/hide, если не заданы параметры меняют display: fadeIn даже без параметров меняет opacity: Только без параметров это делается мгновенно, без анимации. |
voraa,
все эти методы меняют и display и opacity, без параметров "мгновенно" это 400ms. есть разница, но в этом они одинаковы. |
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>
|
| Часовой пояс GMT +3, время: 07:33. |