Сложный рандом
Я пробую сам написать, и пока до этого сложного рандома еще не дошел столкнулся с небольшой проблемой.
У меня скрипт который должен перебрать все элементы с .sfera и вроде бы все правильно сделал но почему то пишет ошибку.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
main{
width: 280px;
margin: 40px auto;
font-size: 10px;
font-family: Verdana, Geneva, Tahoma, sans-serif;
}
.tema_nastroika {
margin: 20px 0px 20px 0px;
}
.nastroika_blok {
}
.vse {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sbros {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_1 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_2 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_3 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_4 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_5 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.vybrano{
color: blueviolet;
text-decoration: underline;
}
.tema_nazvanie{
margin: 20px 0px 20px 0px;
color: #0e9fff;
}
.tema_random {
margin: 20px 0px 20px 0px;
}
.knopka_random{
display: flex;
justify-content: center;
align-items: center;
width: 280px;
height: 70px;
border: 1px solid #0e9fff;
color: #0e9fff;
cursor: pointer;
}
.knopka_random:hover{
border: 1px solid blueviolet;
color: blueviolet;
}
.tema_vremy {
}
</style>
</head>
<body>
<main>
<div class="tema_nastroika">
<div class="nastroika_blok">
<div class="sfera vse vybrano">Выбрать все</div>
<div class="sfera sbros">Сброс</div>
<div class="sfera sfera_1 vybrano">Сфера жизни 1</div>
<div class="sfera sfera_2 vybrano">Сфера жизни 2</div>
<div class="sfera sfera_3 vybrano">Сфера жизни 3</div>
<div class="sfera sfera_4 vybrano">Сфера жизни 4</div>
<div class="sfera sfera_5 vybrano">Сфера жизни 5</div>
</div>
</div>
<div class="tema_nazvanie">
<div class="blok_sfera_1">
<p>Название темы по сфере 1 Вопрос №1</p>
<p>Название темы по сфере 1 Вопрос №2</p>
<p>Название темы по сфере 1 Вопрос №3</p>
<p>Название темы по сфере 1 Вопрос №4</p>
<p>Название темы по сфере 1 Вопрос №5</p>
</div>
<div class="blok_sfera_2">
<p>Название темы по сфере 2 Вопрос №2</p>
<p>Название темы по сфере 2 Вопрос №3</p>
<p>Название темы по сфере 2 Вопрос №1</p>
<p>Название темы по сфере 2 Вопрос №4</p>
<p>Название темы по сфере 2 Вопрос №5</p>
</div>
<div class="blok_sfera_3">
<p>Название темы по сфере 3 Вопрос №1</p>
<p>Название темы по сфере 3 Вопрос №2</p>
<p>Название темы по сфере 3 Вопрос №3</p>
<p>Название темы по сфере 3 Вопрос №4</p>
<p>Название темы по сфере 3 Вопрос №5</p>
</div>
<div class="blok_sfera_4">
<p>Название темы по сфере 4 Вопрос №1</p>
<p>Название темы по сфере 4 Вопрос №2</p>
<p>Название темы по сфере 4 Вопрос №3</p>
<p>Название темы по сфере 4 Вопрос №4</p>
<p>Название темы по сфере 4 Вопрос №5</p>
</div>
<div class="blok_sfera_5">
<p>Название темы по сфере 5 Вопрос №1</p>
<p>Название темы по сфере 5 Вопрос №2</p>
<p>Название темы по сфере 5 Вопрос №3</p>
<p>Название темы по сфере 5 Вопрос №4</p>
<p>Название темы по сфере 5 Вопрос №5</p>
</div>
</div>
<div class="tema_random">
<div class="knopka_random">
Случайная тема
</div>
</div>
<div class="tema_vremy">
Сколько времени осталось
</div>
</main>
<script>
const sfera = document.querySelectorAll(".sfera");
for (let i=0, length = sfera.length; i < length; i++) {
console.log(sfera);
}
sfera_vybr = () => {
sfera.classList.toggle("vybrano");
}
sfera.addEventListener("click", sfera_vybr);
</script>
</body>
</html>
|
const sfera = document.querySelectorAll(".sfera");
Обратите внимание на All. All - значит все. Это же не один элемент, их много. А раз их много, то нельзя делать sfera.addEventListener("click", sfera_vybr); addEventListener можно применять к 1 элементу, а не к массиву или списку. Надо sfera пройти в цикле и к каждому элементу задать обработчик событий. Так же нельзя делать sfera.classList.toggle("vybrano"); .classList - это свойство элемента, а не списка. PS Вы же уже давно пишете какие то программы. Почему Вы до сих пор не пользуетесь инструментами разработчика? Не смотрите в консоль. Там же все ошибки написаны обычно. |
Смотрите, Вы селектором перебираете все ноды с классом sfera. У Вас эта переменная sfera хранит массив нод.
Если прям грубый пример-сравнение: const sfera это как коробка с телефонами. Вам нужно подключить зарядку к выбранному Вами телефону, а Вы втыкаете эту зарядку прямо в коробку. Значит, надо коробку открыть, взять выбранный Вами телефон и его зарядить. На идеальность кода не претендую, но ошибки нет. Соответственно этот код поможет Вам доработать Ваш функционал
const sferes = document.querySelectorAll(".sfera");
sferes.forEach(function(sfera){
sfera.addEventListener("click", function (event){
sfera.classList.toggle("vybrano");
console.log(sfera);
});
});
|
voraa,
понял |
Дмитрий Луценко,
Спасибо, пример с коробкой хороший |
Сергей Ракипов,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
main{
width: 280px;
margin: 40px auto;
font-size: 10px;
font-family: Verdana, Geneva, Tahoma, sans-serif;
}
.tema_nastroika {
margin: 20px 0px 20px 0px;
}
.nastroika_blok {
}
.vse {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sbros {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_1 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_2 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_3 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_4 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_5 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.vybrano{
color: blueviolet;
text-decoration: underline;
}
.tema_nazvanie{
margin: 20px 0px 20px 0px;
color: #0e9fff;
}
.tema_random {
margin: 20px 0px 20px 0px;
}
.knopka_random{
display: flex;
justify-content: center;
align-items: center;
width: 280px;
height: 70px;
border: 1px solid #0e9fff;
color: #0e9fff;
cursor: pointer;
}
.knopka_random:hover{
border: 1px solid blueviolet;
color: blueviolet;
}
.tema_vremy {
}
</style>
</head>
<body>
<main>
<div class="tema_nastroika">
<div class="nastroika_blok">
<div class="sfera vse vybrano">Выбрать все</div>
<div class="sfera sbros">Сброс</div>
<div class="sfera sfera_1 vybrano">Сфера жизни 1</div>
<div class="sfera sfera_2 vybrano">Сфера жизни 2</div>
<div class="sfera sfera_3 vybrano">Сфера жизни 3</div>
<div class="sfera sfera_4 vybrano">Сфера жизни 4</div>
<div class="sfera sfera_5 vybrano">Сфера жизни 5</div>
</div>
</div>
<div class="tema_nazvanie">
<div class="blok_sfera_1">
<p>Название темы по сфере 1 Вопрос №1</p>
<p>Название темы по сфере 1 Вопрос №2</p>
<p>Название темы по сфере 1 Вопрос №3</p>
<p>Название темы по сфере 1 Вопрос №4</p>
<p>Название темы по сфере 1 Вопрос №5</p>
</div>
<div class="blok_sfera_2">
<p>Название темы по сфере 2 Вопрос №2</p>
<p>Название темы по сфере 2 Вопрос №3</p>
<p>Название темы по сфере 2 Вопрос №1</p>
<p>Название темы по сфере 2 Вопрос №4</p>
<p>Название темы по сфере 2 Вопрос №5</p>
</div>
<div class="blok_sfera_3">
<p>Название темы по сфере 3 Вопрос №1</p>
<p>Название темы по сфере 3 Вопрос №2</p>
<p>Название темы по сфере 3 Вопрос №3</p>
<p>Название темы по сфере 3 Вопрос №4</p>
<p>Название темы по сфере 3 Вопрос №5</p>
</div>
<div class="blok_sfera_4">
<p>Название темы по сфере 4 Вопрос №1</p>
<p>Название темы по сфере 4 Вопрос №2</p>
<p>Название темы по сфере 4 Вопрос №3</p>
<p>Название темы по сфере 4 Вопрос №4</p>
<p>Название темы по сфере 4 Вопрос №5</p>
</div>
<div class="blok_sfera_5">
<p>Название темы по сфере 5 Вопрос №1</p>
<p>Название темы по сфере 5 Вопрос №2</p>
<p>Название темы по сфере 5 Вопрос №3</p>
<p>Название темы по сфере 5 Вопрос №4</p>
<p>Название темы по сфере 5 Вопрос №5</p>
</div>
</div>
<div class="tema_random">
<div class="knopka_random">
Случайная тема
</div>
</div>
<div class="tema_vremy">
Сколько времени осталось
</div>
</main>
<script>
const blok = document.querySelector(".nastroika_blok");
const sfera = Array.from(blok.querySelectorAll(".sfera:nth-child(n + 3)"));
sfera_vybr = ({target}) => {
let vse = target.closest(".vse"), sbros = target.closest(".sbros"),
el = sfera.includes(target);
if(vse || sbros)sfera.forEach(e => vse ? e.classList.add("vybrano") : e.classList.remove("vybrano"))
if(el) target.classList.toggle("vybrano");
}
blok.addEventListener("click", sfera_vybr);
</script>
</body>
</html>
|
По когда страница загружается впервые раз там выделены Выбрать все и все Сфера жизни а Сброс не выделен.
Как сделать что бы когда нажимаешь Сброс выделение у всех пропадает кроме Сброс и кнопка .knopka_random становится не доступна с надписью НУЖНО Выбрать хоть одну сферу Ну и соответственно когда нажимаешь хоть на одну Сфера жизни то она выделяется и Сброс выделение пропадает. .knopka_random становится доступна с надписью по умолчанию. А когда снова нажимаешь Выбрать все снова идет выделение как всех Сфера жизни .knopka_random становится доступна с надписью по умолчанию. И все состоянии этих кнопок записались localStorage
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
main{
width: 280px;
margin: 40px auto;
font-size: 10px;
font-family: Verdana, Geneva, Tahoma, sans-serif;
}
.tema_nastroika {
margin: 20px 0px 20px 0px;
}
.nastroika_blok {
}
.vse {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sbros {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_1 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_2 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_3 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_4 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_5 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.vybrano{
color: blueviolet;
text-decoration: underline;
}
.tema_nazvanie{
margin: 20px 0px 20px 0px;
color: #0e9fff;
}
.tema_random {
margin: 20px 0px 20px 0px;
}
.knopka_random{
display: flex;
justify-content: center;
align-items: center;
width: 280px;
height: 70px;
border: 1px solid #0e9fff;
color: #0e9fff;
cursor: pointer;
}
.knopka_random:hover{
border: 1px solid blueviolet;
color: blueviolet;
}
.tema_vremy {
}
</style>
</head>
<body>
<main>
<div class="tema_nastroika">
<div class="nastroika_blok">
<div class="sfera vse vybrano">Выбрать все</div>
<div class="sfera sbros">Сброс</div>
<div class="sfera sfera_1 vybrano">Сфера жизни 1</div>
<div class="sfera sfera_2 vybrano">Сфера жизни 2</div>
<div class="sfera sfera_3 vybrano">Сфера жизни 3</div>
<div class="sfera sfera_4 vybrano">Сфера жизни 4</div>
<div class="sfera sfera_5 vybrano">Сфера жизни 5</div>
</div>
</div>
<div class="tema_nazvanie">
<div class="blok_sfera_1">
<p>Название темы по сфере 1 Вопрос №1</p>
<p>Название темы по сфере 1 Вопрос №2</p>
<p>Название темы по сфере 1 Вопрос №3</p>
<p>Название темы по сфере 1 Вопрос №4</p>
<p>Название темы по сфере 1 Вопрос №5</p>
</div>
<div class="blok_sfera_2">
<p>Название темы по сфере 2 Вопрос №2</p>
<p>Название темы по сфере 2 Вопрос №3</p>
<p>Название темы по сфере 2 Вопрос №1</p>
<p>Название темы по сфере 2 Вопрос №4</p>
<p>Название темы по сфере 2 Вопрос №5</p>
</div>
<div class="blok_sfera_3">
<p>Название темы по сфере 3 Вопрос №1</p>
<p>Название темы по сфере 3 Вопрос №2</p>
<p>Название темы по сфере 3 Вопрос №3</p>
<p>Название темы по сфере 3 Вопрос №4</p>
<p>Название темы по сфере 3 Вопрос №5</p>
</div>
<div class="blok_sfera_4">
<p>Название темы по сфере 4 Вопрос №1</p>
<p>Название темы по сфере 4 Вопрос №2</p>
<p>Название темы по сфере 4 Вопрос №3</p>
<p>Название темы по сфере 4 Вопрос №4</p>
<p>Название темы по сфере 4 Вопрос №5</p>
</div>
<div class="blok_sfera_5">
<p>Название темы по сфере 5 Вопрос №1</p>
<p>Название темы по сфере 5 Вопрос №2</p>
<p>Название темы по сфере 5 Вопрос №3</p>
<p>Название темы по сфере 5 Вопрос №4</p>
<p>Название темы по сфере 5 Вопрос №5</p>
</div>
</div>
<div class="tema_random">
<div class="knopka_random">
Случайная тема
</div>
</div>
<div class="tema_vremy">
Сколько времени осталось
</div>
</main>
<script>
let vse = document.querySelector(".vse");
const sferes = document.querySelectorAll(".sfera");
sferes.forEach(function(sfera){
sfera.addEventListener("click", function (event){
sfera.classList.toggle("vybrano");
console.log(sfera);
if (vse.classList.contain("vybrano")) {
console.log("выбрано все");
}
});
});
</script>
</body>
</html>
|
рони,
Как вы это сделали? вы мысли умеете читать на расстоянии? я писал пост опубликовал а там ответ) |
рони,
Просто вот к чему тема, я могу создать как вывести случайные цифры это одна строка. Но мне вот что нужно. Когда выбраны Выбрать все то нужно вывести одну тему из все Название темы по сфере... рандомно. А если выбраны конкретные то сферы к примеру Сфера жизни 1 и Сфера жизни 5 то нужно вывести одну из этого блока, рандомно
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
main{
width: 280px;
margin: 40px auto;
font-size: 10px;
font-family: Verdana, Geneva, Tahoma, sans-serif;
}
.tema_nastroika {
margin: 20px 0px 20px 0px;
}
.nastroika_blok {
}
.vse {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sbros {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_1 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_2 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_3 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_4 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.sfera_5 {
cursor: pointer;
margin: 10px 0px 10px 0px
}
.vybrano{
color: blueviolet;
text-decoration: underline;
}
.tema_nazvanie{
margin: 20px 0px 20px 0px;
color: #0e9fff;
}
.tema_random {
margin: 20px 0px 20px 0px;
}
.knopka_random{
display: flex;
justify-content: center;
align-items: center;
width: 280px;
height: 70px;
border: 1px solid #0e9fff;
color: #0e9fff;
cursor: pointer;
}
.knopka_random:hover{
border: 1px solid blueviolet;
color: blueviolet;
}
.tema_vremy {
}
.skryt > p {
display: none;
}
</style>
</head>
<body>
<main>
<div class="tema_nastroika">
<div class="nastroika_blok">
<div class="sfera vse vybrano">Выбрать все</div>
<div class="sfera sbros">Сброс</div>
<div class="sfera sfera_1 vybrano">Сфера жизни 1</div>
<div class="sfera sfera_2 vybrano">Сфера жизни 2</div>
<div class="sfera sfera_3 vybrano">Сфера жизни 3</div>
<div class="sfera sfera_4 vybrano">Сфера жизни 4</div>
<div class="sfera sfera_5 vybrano">Сфера жизни 5</div>
</div>
</div>
<div class="tema_nazvanie">
<div class="skryt blok_sfera_1">
<p>Название темы по сфере 1 Вопрос №1</p>
<p>Название темы по сфере 1 Вопрос №2</p>
<p>Название темы по сфере 1 Вопрос №3</p>
<p>Название темы по сфере 1 Вопрос №4</p>
<p>Название темы по сфере 1 Вопрос №5</p>
</div>
<div class="skryt blok_sfera_2">
<p>Название темы по сфере 2 Вопрос №2</p>
<p>Название темы по сфере 2 Вопрос №3</p>
<p>Название темы по сфере 2 Вопрос №1</p>
<p>Название темы по сфере 2 Вопрос №4</p>
<p>Название темы по сфере 2 Вопрос №5</p>
</div>
<div class="skryt blok_sfera_3">
<p>Название темы по сфере 3 Вопрос №1</p>
<p>Название темы по сфере 3 Вопрос №2</p>
<p>Название темы по сфере 3 Вопрос №3</p>
<p>Название темы по сфере 3 Вопрос №4</p>
<p>Название темы по сфере 3 Вопрос №5</p>
</div>
<div class="skryt blok_sfera_4">
<p>Название темы по сфере 4 Вопрос №1</p>
<p>Название темы по сфере 4 Вопрос №2</p>
<p>Название темы по сфере 4 Вопрос №3</p>
<p>Название темы по сфере 4 Вопрос №4</p>
<p>Название темы по сфере 4 Вопрос №5</p>
</div>
<div class="skryt blok_sfera_5">
<p>Название темы по сфере 5 Вопрос №1</p>
<p>Название темы по сфере 5 Вопрос №2</p>
<p>Название темы по сфере 5 Вопрос №3</p>
<p>Название темы по сфере 5 Вопрос №4</p>
<p>Название темы по сфере 5 Вопрос №5</p>
</div>
</div>
<div class="tema_random">
<div class="knopka_random">
Случайная тема
</div>
</div>
<div class="tema_vremy">
Сколько времени осталось
</div>
</main>
<script>
const blok = document.querySelector(".nastroika_blok");
const sfera = Array.from(blok.querySelectorAll(".sfera:nth-child(n + 3)"));
sfera_vybr = ({target}) => {
let vse = target.closest(".vse"), sbros = target.closest(".sbros"),
el = sfera.includes(target);
if(vse || sbros)sfera.forEach(e => vse ? e.classList.add("vybrano") : e.classList.remove("vybrano"))
if(el) target.classList.toggle("vybrano");
}
blok.addEventListener("click", sfera_vybr);
</script>
</body>
</html>
|
Цитата:
|
вопросник случайный выбор
Сергей Ракипов,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
main {
width: 280px;
margin: 40px auto;
font-size: 10px;
font-family: Verdana, Geneva, Tahoma, sans-serif;
}
/* настройки */
.parameters .active {
color: #FF0000;
}
.parameters {
cursor: pointer;
}
/* тема */
.partition {
border: 1px solid #0e9fff;
text-align: center;
border-radius: 8px;
}
.partition>p,
.partition {
display: none;
}
.partition>p.active,
.partition.active {
display: block;
}
/* кнопка выбора темы */
.button_random {
display: flex;
justify-content: center;
align-items: center;
width: 280px;
height: 70px;
border: 1px solid #0e9fff;
color: #0e9fff;
cursor: pointer;
}
.button_random.active {
border-color: #008000;
}
.button_random:hover {
border: 1px solid blueviolet;
color: blueviolet;
}
.button_random:after {
content: "НУЖНО Выбрать хоть одну сферу"
}
.button_random.active:after {
content: "Случайная тема"
}
</style>
</head>
<body>
<main>
<div class="control">
<div class="parameters">
<div class="all">Выбрать все</div>
<div class="reset active">Сброс</div>
<div class="sfera">Сфера жизни 1</div>
<div class="sfera">Сфера жизни 2</div>
<div class="sfera">Сфера жизни 3</div>
<div class="sfera">Сфера жизни 4</div>
<div class="sfera">Сфера жизни 5</div>
</div>
</div>
<div class="sections">
<div class="partition">
<p>Название темы по сфере 1 Вопрос №1</p>
<p>Название темы по сфере 1 Вопрос №2</p>
<p>Название темы по сфере 1 Вопрос №3</p>
<p>Название темы по сфере 1 Вопрос №4</p>
<p>Название темы по сфере 1 Вопрос №5</p>
</div>
<div class="partition">
<p>Название темы по сфере 2 Вопрос №2</p>
<p>Название темы по сфере 2 Вопрос №3</p>
<p>Название темы по сфере 2 Вопрос №1</p>
<p>Название темы по сфере 2 Вопрос №4</p>
<p>Название темы по сфере 2 Вопрос №5</p>
</div>
<div class="partition">
<p>Название темы по сфере 3 Вопрос №1</p>
<p>Название темы по сфере 3 Вопрос №2</p>
<p>Название темы по сфере 3 Вопрос №3</p>
<p>Название темы по сфере 3 Вопрос №4</p>
<p>Название темы по сфере 3 Вопрос №5</p>
</div>
<div class="partition">
<p>Название темы по сфере 4 Вопрос №1</p>
<p>Название темы по сфере 4 Вопрос №2</p>
<p>Название темы по сфере 4 Вопрос №3</p>
<p>Название темы по сфере 4 Вопрос №4</p>
<p>Название темы по сфере 4 Вопрос №5</p>
</div>
<div class="partition">
<p>Название темы по сфере 5 Вопрос №1</p>
<p>Название темы по сфере 5 Вопрос №2</p>
<p>Название темы по сфере 5 Вопрос №3</p>
<p>Название темы по сфере 5 Вопрос №4</p>
<p>Название темы по сфере 5 Вопрос №5</p>
</div>
</div>
<div class="title_random">
<div class="button_random">
</div>
</div>
<div class="title_time">
Сколько времени осталось
</div>
</main>
<script>
const parameter = document.querySelector(".parameters");
const buttons = Array.from(parameter.querySelectorAll(".sfera"));
const reset = parameter.querySelector(".reset");
const all = parameter.querySelector(".all");
const random = document.querySelector(".button_random");
const sections = Array.from(document.querySelectorAll(".partition"));
const select = ({ target }) => {
let method = "";
if (target == reset) method = "remove";
if (target == all) method = "add";
if (method) buttons.forEach(button => button.classList[method]("active"))
if (buttons.includes(target)) target.classList.toggle("active");
let len = parameter.querySelectorAll(".sfera.active").length;
all.classList.toggle("active", len == buttons.length);
reset.classList.toggle("active", !len);
random.classList.toggle("active", len);
random_title(true);
}
const random_title = (reset) => {
let arr = [];
buttons.forEach((button, i) => {
const active = button.classList.contains("active");
const section = sections[i];
section.classList.remove("active");
const items = sections[i].querySelectorAll("p");
items.forEach((item, i) => item.classList.remove("active"));
const k = Math.trunc(Math.random() * items.length);
const item = items[k]
if(active) arr.push({section, item});
})
if(!reset){
const j = Math.trunc(Math.random() * arr.length);
const {section, item} = arr[j];
item.classList.add("active");
section.classList.add("active");
}
}
parameter.addEventListener("click", select);
random.addEventListener("click", ()=> {
let active = random.classList.contains("active");
if (!active) return;
random_title();
});
</script>
</body>
</html>
|
рони,
Я почему тему назвал сложного рандома, так как нужно сделать когда человек выбирает примеру из 1 и 3 сферы ему выдается только ОДНИ вопрос то есть из этих сфер не два вопроса, а ОДНА, случайно. И соответственно когда выбраны все сферы нужно из всех выбрать один случайны вопрос, а не 5. Особенность в том что сфер может быть и 10 и 3, а в каждой сфере может быть и 2 вопроса и 200 вопросов. Но как я посмотрел код вроде он с этим справиться легко. И еще можно что бы выбранные сферы .sfera .reset .all записывались localStorage, то есть человек зашел сегодня выбрал сферы к примеру 2 и 4 , нажал ему случайно дали вопрос и когда завтра зашел ему не нужно будет снова выбирать эти сферы 2 и 4. И еще когда высвечивается надпись НУЖНО Выбрать хоть одну сферу, нужно, что бы кнопка была не кликабельна. Но это просто пожелание, так как там задумка в том что когда человек нажал на кнопку ему на 5 секунд заблокировали кнопку выбора темы и внизу таймер из 5 секунд. .title_time Это нужно для того что бы он как сумасшедший не перебирал темы. |
Сергей Ракипов,
обновите страницу, и далее сами. |
рони,
Спасибо, да хорошо, я буду пробовать, как раз завтра выходные |
Цитата:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
main {
width: 280px;
margin: 40px auto;
font-size: 10px;
font-family: Verdana, Geneva, Tahoma, sans-serif;
}
/* настройки */
.parameters .active {
color: #FF0000;
}
.parameters {
cursor: pointer;
}
/* тема */
.partition {
border: 1px solid #0e9fff;
text-align: center;
border-radius: 8px;
}
.partition>p,
.partition {
display: none;
}
.partition>p.active,
.partition.active {
display: block;
}
/* кнопка выбора темы */
.button_random {
display: flex;
justify-content: center;
align-items: center;
width: 280px;
height: 70px;
border: 1px solid #0e9fff;
color: #0e9fff;
cursor: pointer;
}
.button_random.active {
border-color: #008000;
}
.button_random:hover {
border: 1px solid blueviolet;
color: blueviolet;
}
.button_random:after {
content: "НУЖНО Выбрать хоть одну сферу";
}
.button_random.active:after {
content: "Случайная тема";
}
.button_random.disabled:after {
content: attr(data-time)"s";
}
</style>
</head>
<body>
<main>
<div class="control">
<div class="parameters">
<div class="all">Выбрать все</div>
<div class="reset active">Сброс</div>
<div class="sfera">Сфера жизни 1</div>
<div class="sfera">Сфера жизни 2</div>
<div class="sfera">Сфера жизни 3</div>
<div class="sfera">Сфера жизни 4</div>
<div class="sfera">Сфера жизни 5</div>
</div>
</div>
<div class="sections">
<div class="partition">
<p>Название темы по сфере 1 Вопрос №1</p>
<p>Название темы по сфере 1 Вопрос №2</p>
<p>Название темы по сфере 1 Вопрос №3</p>
<p>Название темы по сфере 1 Вопрос №4</p>
<p>Название темы по сфере 1 Вопрос №5</p>
</div>
<div class="partition">
<p>Название темы по сфере 2 Вопрос №2</p>
<p>Название темы по сфере 2 Вопрос №3</p>
<p>Название темы по сфере 2 Вопрос №1</p>
<p>Название темы по сфере 2 Вопрос №4</p>
<p>Название темы по сфере 2 Вопрос №5</p>
</div>
<div class="partition">
<p>Название темы по сфере 3 Вопрос №1</p>
<p>Название темы по сфере 3 Вопрос №2</p>
<p>Название темы по сфере 3 Вопрос №3</p>
<p>Название темы по сфере 3 Вопрос №4</p>
<p>Название темы по сфере 3 Вопрос №5</p>
</div>
<div class="partition">
<p>Название темы по сфере 4 Вопрос №1</p>
<p>Название темы по сфере 4 Вопрос №2</p>
<p>Название темы по сфере 4 Вопрос №3</p>
<p>Название темы по сфере 4 Вопрос №4</p>
<p>Название темы по сфере 4 Вопрос №5</p>
</div>
<div class="partition">
<p>Название темы по сфере 5 Вопрос №1</p>
<p>Название темы по сфере 5 Вопрос №2</p>
<p>Название темы по сфере 5 Вопрос №3</p>
<p>Название темы по сфере 5 Вопрос №4</p>
<p>Название темы по сфере 5 Вопрос №5</p>
</div>
</div>
<div class="title_random" >
<div class="button_random">
</div>
</div>
</main>
<script>
const parameter = document.querySelector(".parameters");
const buttons = Array.from(parameter.querySelectorAll(".sfera"));
const reset = parameter.querySelector(".reset");
const all = parameter.querySelector(".all");
const random = document.querySelector(".button_random");
const sections = Array.from(document.querySelectorAll(".partition"));
const duration = 10000;
let timer, beginTime;
const loop = time => {
const end = time - beginTime ;
if(end >= duration) {
random.classList.add("active");
random.classList.remove("disabled");
}
else {
random.dataset.time = Math.trunc((duration - end)/1000);
timer = requestAnimationFrame(loop);
}
}
const select = ({ target }) => {
let method = "";
if (target == reset) method = "remove";
if (target == all) method = "add";
if (method) buttons.forEach(button => button.classList[method]("active"))
if (buttons.includes(target)) target.classList.toggle("active");
let len = parameter.querySelectorAll(".sfera.active").length;
all.classList.toggle("active", len == buttons.length);
reset.classList.toggle("active", !len);
random.classList.toggle("active", len);
random.classList.remove("disabled");
random_title(true);
}
const random_title = (reset) => {
cancelAnimationFrame(timer);
let arr = [];
buttons.forEach((button, i) => {
const active = button.classList.contains("active");
const section = sections[i];
section.classList.remove("active");
const items = sections[i].querySelectorAll("p");
items.forEach((item, i) => item.classList.remove("active"));
const k = Math.trunc(Math.random() * items.length);
const item = items[k];
if(active) arr.push({i, item});
})
let arr_section = arr.map(({i}) => i);
arr_section = JSON.stringify(arr_section);
localStorage.setItem("arr_section", arr_section);
if(!reset){
const j = Math.trunc(Math.random() * arr.length);
const {i, item} = arr[j];
item.classList.add("active");
sections[i].classList.add("active");
random.classList.remove("active");
random.classList.add("disabled");
beginTime = performance.now();
timer = requestAnimationFrame(loop);
}
}
let arr_section = localStorage.getItem("arr_section") || "[]";
arr_section = JSON.parse(arr_section);
arr_section.forEach(i => buttons[i].classList.add("active"));
select({ target : null});
parameter.addEventListener("click", select);
random.addEventListener("click", ()=> {
let active = random.classList.contains("active");
if (!active) return;
random_title();
});
</script>
</body>
</html>
|
рони,
:) спасибо с не кликабельностью кнопки я решил проблему это не сложно было в css |
Цитата:
Цитата:
|
А вот сделал визуально кнопку не кликабельной во время таймера. А можно сделать еще что бы и .parameters > div тоже были не кликабельны ну значок cursor: not-allowed;
Я пробовал вот тут это как то сделать
const loop = time => {
const end = time - beginTime;
if ( end >= duration ) {
random.classList.add( "active" );
random.classList.remove( "disabled" );
} else {
random.dataset.time = Math.trunc( ( duration - end ) / 1000 );
timer = requestAnimationFrame( loop );
}
}
Но либо я синтекс не правильно писал либо вообще не туда
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
main {
width: 280px;
margin: 40px auto;
font-size: 10px;
font-family: Verdana, Geneva, Tahoma, sans-serif;
}
/* настройки */
.parameters .active {
color: #FF0000;
}
.parameters {
cursor: pointer;
}
.parameters > div {
margin: 20px 0px 20px 0px;
}
/* тема */
.partition {
border: 1px solid #0e9fff;
text-align: center;
border-radius: 8px;
}
.partition>p,
.partition {
display: none;
}
.partition>p.active,
.partition.active {
display: block;
}
/* кнопка выбора темы */
.button_random {
display: flex;
justify-content: center;
align-items: center;
width: 280px;
height: 70px;
border: 1px solid #0e9fff;
color: #0e9fff;
cursor: pointer;
}
.button_random.active {
border: 1px solid #0e9fff;
border-color: #008000;
}
.button_random:hover {
color: blueviolet;
}
.button_random:after {
display: flex;
justify-content: center;
align-items: center;
content: "НУЖНО Выбрать хоть одну сферу";
background-color: #fff;
border: 1px solid #0e9fff;
width: 280px;
height: 70px;
cursor: not-allowed;
}
.button_random:hover::after {
display: flex;
justify-content: center;
align-items: center;
content: "НУЖНО Выбрать хоть одну сферу";
background-color: #fff;
width: 280px;
height: 70px;
cursor: not-allowed;
border: 1px solid #0e9fff;
color: #0e9fff;
}
.button_random.active:after {
content: "Случайная тема";
cursor: pointer;
}
.button_random.disabled:after {
content:"Нужно подождать " attr(data-time) " секунд";
}
</style>
</head>
<body>
<main>
<div class="control">
<div class="parameters">
<div class="all">Выбрать все</div>
<div class="reset active">Сброс</div>
<div class="sfera">Сфера жизни 1</div>
<div class="sfera">Сфера жизни 2</div>
<div class="sfera">Сфера жизни 3</div>
<div class="sfera">Сфера жизни 4</div>
<div class="sfera">Сфера жизни 5</div>
</div>
</div>
<div class="sections">
<div class="partition">
<p>Название темы по сфере 1 Вопрос №1</p>
<p>Название темы по сфере 1 Вопрос №2</p>
<p>Название темы по сфере 1 Вопрос №3</p>
<p>Название темы по сфере 1 Вопрос №4</p>
<p>Название темы по сфере 1 Вопрос №5</p>
</div>
<div class="partition">
<p>Название темы по сфере 2 Вопрос №2</p>
<p>Название темы по сфере 2 Вопрос №3</p>
<p>Название темы по сфере 2 Вопрос №1</p>
<p>Название темы по сфере 2 Вопрос №4</p>
<p>Название темы по сфере 2 Вопрос №5</p>
</div>
<div class="partition">
<p>Название темы по сфере 3 Вопрос №1</p>
<p>Название темы по сфере 3 Вопрос №2</p>
<p>Название темы по сфере 3 Вопрос №3</p>
<p>Название темы по сфере 3 Вопрос №4</p>
<p>Название темы по сфере 3 Вопрос №5</p>
</div>
<div class="partition">
<p>Название темы по сфере 4 Вопрос №1</p>
<p>Название темы по сфере 4 Вопрос №2</p>
<p>Название темы по сфере 4 Вопрос №3</p>
<p>Название темы по сфере 4 Вопрос №4</p>
<p>Название темы по сфере 4 Вопрос №5</p>
</div>
<div class="partition">
<p>Название темы по сфере 5 Вопрос №1</p>
<p>Название темы по сфере 5 Вопрос №2</p>
<p>Название темы по сфере 5 Вопрос №3</p>
<p>Название темы по сфере 5 Вопрос №4</p>
<p>Название темы по сфере 5 Вопрос №5</p>
</div>
</div>
<div class="title_random">
<div class="button_random">
</div>
</div>
</main>
<script>
const parameter = document.querySelector( ".parameters" );
const buttons = Array.from( parameter.querySelectorAll( ".sfera" ) );
const reset = parameter.querySelector( ".reset" );
const all = parameter.querySelector( ".all" );
const random = document.querySelector( ".button_random" );
const sections = Array.from( document.querySelectorAll( ".partition" ) );
const duration = 4000;
let timer, beginTime;
const loop = time => {
const end = time - beginTime;
if ( end >= duration ) {
random.classList.add( "active" );
random.classList.remove( "disabled" );
} else {
random.dataset.time = Math.trunc( ( duration - end ) / 1000 );
timer = requestAnimationFrame( loop );
}
}
const select = ( {
target
} ) => {
let method = "";
if ( target == reset ) method = "remove";
if ( target == all ) method = "add";
if ( method ) buttons.forEach( button => button.classList[ method ]( "active" ) )
if ( buttons.includes( target ) ) target.classList.toggle( "active" );
let len = parameter.querySelectorAll( ".sfera.active" ).length;
all.classList.toggle( "active", len == buttons.length );
reset.classList.toggle( "active", !len );
random.classList.toggle( "active", len );
random.classList.remove( "disabled" );
random_title( true );
}
const random_title = ( reset ) => {
cancelAnimationFrame( timer );
let arr = [];
buttons.forEach( ( button, i ) => {
const active = button.classList.contains( "active" );
const section = sections[ i ];
section.classList.remove( "active" );
const items = sections[ i ].querySelectorAll( "p" );
items.forEach( ( item, i ) => item.classList.remove( "active" ) );
const k = Math.trunc( Math.random() * items.length );
const item = items[ k ];
if ( active ) arr.push( {
i,
item
} );
} )
let arr_section = arr.map( ( {
i
} ) => i );
arr_section = JSON.stringify( arr_section );
localStorage.setItem( "arr_section", arr_section );
if ( !reset ) {
const j = Math.trunc( Math.random() * arr.length );
const {
i,
item
} = arr[ j ];
item.classList.add( "active" );
sections[ i ].classList.add( "active" );
random.classList.remove( "active" );
random.classList.add( "disabled" );
beginTime = performance.now();
timer = requestAnimationFrame( loop );
}
}
let arr_section = localStorage.getItem( "arr_section" ) || "[]";
arr_section = JSON.parse( arr_section );
arr_section.forEach( i => buttons[ i ].classList.add( "active" ) );
select( {
target: null
} );
parameter.addEventListener( "click", select );
random.addEventListener( "click", () => {
let active = random.classList.contains( "active" );
if ( !active ) return;
random_title();
} );
</script>
</body>
</html>
|
Цитата:
|
Просто по факту таймер сбрасывает нажатие .parameters > div
|
Цитата:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
main {
width: 280px;
margin: 40px auto;
font-size: 10px;
font-family: Verdana, Geneva, Tahoma, sans-serif;
}
/* настройки */
.parameters .active {
color: #FF0000;
}
.parameters {
cursor: pointer;
}
/* тема */
.partition {
border: 1px solid #0e9fff;
text-align: center;
border-radius: 8px;
}
.partition>p,
.partition {
display: none;
}
.partition>p.active,
.partition.active {
display: block;
}
/* кнопка выбора темы */
.button_random {
display: flex;
justify-content: center;
align-items: center;
width: 280px;
height: 70px;
border: 1px solid #0e9fff;
color: #0e9fff;
cursor: pointer;
}
.button_random.active {
border-color: #008000;
}
.button_random:hover {
border: 1px solid blueviolet;
color: blueviolet;
}
.button_random:after {
content: "НУЖНО Выбрать хоть одну сферу";
}
.button_random.active:after {
content: "Случайная тема";
}
.button_random.disabled:after {
content: attr(data-time)"s";
}
</style>
</head>
<body>
<main>
<div class="control">
<div class="parameters">
<div class="all">Выбрать все</div>
<div class="reset active">Сброс</div>
<div class="sfera">Сфера жизни 1</div>
<div class="sfera">Сфера жизни 2</div>
<div class="sfera">Сфера жизни 3</div>
<div class="sfera">Сфера жизни 4</div>
<div class="sfera">Сфера жизни 5</div>
</div>
</div>
<div class="sections">
<div class="partition">
<p>Название темы по сфере 1 Вопрос №1</p>
<p>Название темы по сфере 1 Вопрос №2</p>
<p>Название темы по сфере 1 Вопрос №3</p>
<p>Название темы по сфере 1 Вопрос №4</p>
<p>Название темы по сфере 1 Вопрос №5</p>
</div>
<div class="partition">
<p>Название темы по сфере 2 Вопрос №2</p>
<p>Название темы по сфере 2 Вопрос №3</p>
<p>Название темы по сфере 2 Вопрос №1</p>
<p>Название темы по сфере 2 Вопрос №4</p>
<p>Название темы по сфере 2 Вопрос №5</p>
</div>
<div class="partition">
<p>Название темы по сфере 3 Вопрос №1</p>
<p>Название темы по сфере 3 Вопрос №2</p>
<p>Название темы по сфере 3 Вопрос №3</p>
<p>Название темы по сфере 3 Вопрос №4</p>
<p>Название темы по сфере 3 Вопрос №5</p>
</div>
<div class="partition">
<p>Название темы по сфере 4 Вопрос №1</p>
<p>Название темы по сфере 4 Вопрос №2</p>
<p>Название темы по сфере 4 Вопрос №3</p>
<p>Название темы по сфере 4 Вопрос №4</p>
<p>Название темы по сфере 4 Вопрос №5</p>
</div>
<div class="partition">
<p>Название темы по сфере 5 Вопрос №1</p>
<p>Название темы по сфере 5 Вопрос №2</p>
<p>Название темы по сфере 5 Вопрос №3</p>
<p>Название темы по сфере 5 Вопрос №4</p>
<p>Название темы по сфере 5 Вопрос №5</p>
</div>
</div>
<div class="title_random" >
<div class="button_random">
</div>
</div>
</main>
<script>
const parameter = document.querySelector(".parameters");
const buttons = Array.from(parameter.querySelectorAll(".sfera"));
const reset = parameter.querySelector(".reset");
const all = parameter.querySelector(".all");
const random = document.querySelector(".button_random");
const sections = Array.from(document.querySelectorAll(".partition"));
const duration = 10000;
let timer, beginTime;
const loop = time => {
const end = time - beginTime ;
if(end >= duration) {
random.classList.add("active");
random.classList.remove("disabled");
}
else {
random.dataset.time = Math.trunc((duration - end)/1000);
timer = requestAnimationFrame(loop);
}
}
const select = ({ target }) => {
let disabled = random.classList.contains("disabled");
if (disabled && target) return;
let method = "";
if (target == reset) method = "remove";
if (target == all) method = "add";
if (method) buttons.forEach(button => button.classList[method]("active"))
if (buttons.includes(target)) target.classList.toggle("active");
let len = parameter.querySelectorAll(".sfera.active").length;
all.classList.toggle("active", len == buttons.length);
reset.classList.toggle("active", !len);
random.classList.toggle("active", len);
random.classList.remove("disabled");
random_title(true);
}
const random_title = (reset) => {
cancelAnimationFrame(timer);
let arr = [];
buttons.forEach((button, i) => {
const active = button.classList.contains("active");
const section = sections[i];
section.classList.remove("active");
const items = sections[i].querySelectorAll("p");
items.forEach((item, i) => item.classList.remove("active"));
const k = Math.trunc(Math.random() * items.length);
const item = items[k];
if(active) arr.push({i, item});
})
let arr_section = arr.map(({i}) => i);
arr_section = JSON.stringify(arr_section);
localStorage.setItem("arr_section", arr_section);
if(!reset){
const j = Math.trunc(Math.random() * arr.length);
const {i, item} = arr[j];
item.classList.add("active");
sections[i].classList.add("active");
random.classList.remove("active");
random.classList.add("disabled");
beginTime = performance.now();
timer = requestAnimationFrame(loop);
}
}
let arr_section = localStorage.getItem("arr_section") || "[]";
arr_section = JSON.parse(arr_section);
arr_section.forEach(i => buttons[i].classList.add("active"));
select({ target : null});
parameter.addEventListener("click", select);
random.addEventListener("click", ()=> {
let active = random.classList.contains("active");
if (!active) return;
random_title();
});
</script>
</body>
</html>
|
рони,
Как всегда идеально! спасибо |
| Часовой пояс GMT +3, время: 08:57. |