Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.05.2019, 23:09
Аспирант
Отправить личное сообщение для Lefseq Посмотреть профиль Найти все сообщения от Lefseq
 
Регистрация: 19.04.2019
Сообщений: 91

Как сделать запоминание в куках результат открытия картинок и текста?
Всем привет! Изложу суть.

На странице имеется 2 блока, первый при заходе на сайт выдает картинки с определенным интервалом времени, (от первой до третей, не по кругу, а именно от 1 до 3 (один раз)), второй блок в это время выдает блоки с текстом также с определенным интервалом времени. Но проблема в том, что когда обновляешь страницу, выдача блоков повторяется. Помогите с помощью куков сделать запоминание браузером пользователя, результат открытие всех блоков на странице. В общем, чтобы после обновления страницы, стояла картинка под номером, и были открытыми все текстовые блоки.

Код для блока с текстом:

<div class="hide_block1">Текст 1</div>
<div class="hide_block2">Текст 2</div>
<div class="hide_block3">Текст 3</div>
<div class="hide_block4">Текст 4</div>
<div class="hide_block5">Текст 5</div>


.hide_block1 {
  overflow: hidden;
  animation: showDiv 4s forwards;
}

.hide_block2 {
  overflow: hidden;
  animation: showDiv 14s forwards;
}

.hide_block3 {
  overflow: hidden;
  animation: showDiv 25s forwards;
}


.hide_block4 {
  overflow: hidden;
  animation: showDiv 33s forwards;
}


.hide_block5 {
  overflow: hidden;
  animation: showDiv 42s forwards;
}

@keyframes showDiv {
  0%, 99% {
    height: 0px;
  }
  100% {
    height: 100%;
  }
}


Код картинок:

<div id="slider">
    <img src="" id="one">
    <img src="" id="two">
</div>


#slider{
    width: 100px;
    height: 100px;
    margin: 0px auto;
}
#slider > img{
    position: absolute;
    transition: 1s;
}


const viewImages = props => {
    let i = 0, elems = [two, one], timeout; one.src = props.img[0], two.src = props.img[1];
    const changeImg = () => {
        elems.reverse();
        elems[0].style.opacity = 1, elems[1].style.opacity = 0;
        setTimeout(()=> elems[1].src = props.img[i], props.speed * 1000 + 900);
        timeout = setTimeout(changeImg, props.speed * 1000);
        i == props.img.length - 1 ? (i = 0, clearTimeout(timeout)) : i++;
    }; changeImg();
}
 
viewImages({
    img : [
        'https://pp.userapi.com/c849416/v849416811/13d2f8/zPAXn4wkdbs.jpg',
        'https://pp.userapi.com/c849416/v849416811/13d2f1/8i73jwgUPek.jpg',
        'https://pp.userapi.com/c849416/v849416811/13d2ea/mM6hEHXbOkY.jpg'
    ],
    speed : 2
});
Ответить с цитированием
  #2 (permalink)  
Старый 12.05.2019, 01:17
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,708

Вы можете использовать sessionStorage, и запоминать, когда впервые зашёл пользователь...

<style>
	.hide_block1 {
		overflow: hidden;
		animation: showDiv 4s forwards;
	}

	.hide_block2 {
		overflow: hidden;
		animation: showDiv 14s forwards;
	}

	.hide_block3 {
		overflow: hidden;
		animation: showDiv 25s forwards;
	}


	.hide_block4 {
		overflow: hidden;
		animation: showDiv 33s forwards;
	}


	.hide_block5 {
		overflow: hidden;
		animation: showDiv 42s forwards;
	}

	@keyframes showDiv {

		0%, 99% {
			height: 0px;
		}

		100% {
			height: 100%;
		}
	}

</style>

<style id="customStyleSheet"></style>

<style>
	#slider {
		width: 100px;
		height: 100px;
		margin: 0px auto;
	}

	#slider > img {
		position: absolute;
		transition: 1s;
		background-color: black;
	}

</style>

<section id="slider">
	<img id="one">
	<img id="two">
</section>

<section>
	<div class="hide_block1">Текст 1</div>
	<div class="hide_block2">Текст 2</div>
	<div class="hide_block3">Текст 3</div>
	<div class="hide_block4">Текст 4</div>
	<div class="hide_block5">Текст 5</div>
</section>

<script>
	var startDate;

	if("startDate" in sessionStorage) {
		startDate = Number(sessionStorage.startDate);
	} else {
		startDate = Date.now();
		sessionStorage.startDate = startDate.toString();
	}

	customStyleSheet.textContent = `
		[class*=hide_block] {
			animation-delay: -${Date.now() - startDate}ms;
		}
	`;

	function viewImages({ img, speed }) {
		var i = Math.floor((Date.now() - startDate) / 1000);

		(function changeImg() {
			one.src = img[clamp(i % 2 === 0 ? i     : i - 1)];
			two.src = img[clamp(i % 2 === 0 ? i - 1 : i    )];
			two.style.opacity = i % 2;

			i++;
			if(img.length > i) setTimeout(changeImg, 1000 * speed);
		})();

		function clamp(x) {
			return x < 0 ? 0 : x >= img.length ? img.length - 1 : x;
		}
	}

	viewImages({
		img: [
			'https://pp.userapi.com/c849416/v849416811/13d2f8/zPAXn4wkdbs.jpg',
			'https://pp.userapi.com/c849416/v849416811/13d2f1/8i73jwgUPek.jpg',
			'https://pp.userapi.com/c849416/v849416811/13d2ea/mM6hEHXbOkY.jpg'
		],
		speed: 2
	});

</script>
Ответить с цитированием
  #3 (permalink)  
Старый 12.05.2019, 14:59
Аспирант
Отправить личное сообщение для Lefseq Посмотреть профиль Найти все сообщения от Lefseq
 
Регистрация: 19.04.2019
Сообщений: 91

Malleys, Спасибо то что надо, только sessionStorage поменял на localStorage.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать такую страницу mortido Элементы интерфейса 11 02.10.2014 06:20
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 11:29
Как сделать калькулятор и с чего начать? A.P. Yellowman Общие вопросы Javascript 3 15.11.2013 19:32
Как сделать так чтобы ajax возвращал результат? Rooner AJAX и COMET 7 28.06.2013 11:42
Как сделать чтобы textarea тянулась в высоту при добавлении в нее текста? javasc Общие вопросы Javascript 4 27.03.2012 21:14