Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.06.2020, 06:01
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

Сдвиг блоков
У меня задача что блоки смешались друг за другом
Ниже код но скрипт, это моя попытка, он закомментирован так как он не работает так как нужно.
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
*{
	margin: 0;
	padding: 0;
	box-sizing: border-box;
	border: none;
	outline: none;
	line-height: -.36em;
	font-size: 0;
	word-spacing: -.36em;
	zoom: 1;
}
:root{
	--tsvet_tekst: #fff;
}
body{
	font-family: Verdana, Geneva CY, Helvetica, DejaVu Sans, Arial, sans-serif;
	font-size: .8rem;
	line-height: 160%;
	position: relative;
}
.naivigat{
	position: fixed;
	top: 10px;
	left: calc(50% - 50px);
	width: 100px;
	height: 50px;
	z-index: 100;
	cursor: pointer;
	display: table;
}
.sledushay{
	width: 50px;
	height: 50px;
	background-color: #2e2e2e;
	display: inline-block;
}
.prededushay{
	width: 50px;
	height: 50px;
	background-color: gray;
	display: inline-block;
}
.portfolio_blok{
	display: grid;
	grid-template-columns: 50vw 50vw; 
	grid-template-rows: 100vh;
	grid-template-areas: "danyi_blok foto_blok";
}
.danyi_blok{
	grid-area: danyi_blok;
	background-color: gray;
}
.foto_blok{
	grid-area: foto_blok;
	background-color: #2e2e2e;
	overflow: hidden;
	display: table;

}

.foto_blok_obertka{
	width: 250vw;
}
.foto{
	transition: all 1s;
	display: inline-block;
	line-height: -.36em;
	font-size: 0;
	word-spacing: -.36em;
	zoom: 1;
}
.foto:nth-child(1){
	width: 50vw;
    height: 100vh;
    background-color:lightcoral;
}
.foto:nth-child(2){
	width: 50vw;
    height: 100vh;
    background-color:dodgerblue;
}
.foto:nth-child(3){
	width: 50vw;
    height: 100vh;
    background-color:darksalmon;
}
.foto:nth-child(4){
	width: 50vw;
    height: 100vh;
    background-color:cadetblue;
}
.foto:nth-child(5){
	width: 50vw;
    height: 100vh;
    background-color:burlywood;
}
    </style>
    <title>Document</title>
</head>
<body>
    <div class="naivigat">
		<div class="sledushay"></div>
		<div class="prededushay"></div>
	</div>
 <div class="portfolio_blok">
	 <div class="danyi_blok">
		<div class="info_1">

		</div>
	 </div>
	 <div class="foto_blok">
		<div class="foto_blok_obertka">
			<div class="foto"></div>
			<div class="foto"></div>
			<div class="foto"></div>
			<div class="foto"></div>
			<div class="foto"></div>
		</div>
	 </div>
 </div>
<script>
"use strict"

const sledushay = document.querySelector(".sledushay");
const prededushay = document.querySelector(".prededushay");
const fotoBlokObertka = document.querySelector(".foto_blok_obertka")
const foto = document.querySelectorAll(".foto");
let sdvig = 50;
let i = 0;


// sledushay.onclick = function(){

//     fotoBlokObertka.style.transform = "translateX(-50vw)";

// }

// prededushay.onclick = function(){

// }

// "translateX(" + "-50" + "vw)";

// sledushay.onclick = function(){
//     foto[i].style.transform = "translateX("+"-50"+"vw)";
//     i++;
//     if (i >= foto.length){
//     i = 0;
//     }
//     foto[i].classList.remove("sdvig");
//     console.log("!")
// }

// prededushay.onclick = function(){
//     foto[i].style.transform = "translateX("+"-50"+"vw)";
//     i--;
//     if(i < 0){
//     i = foto.length - 1;
//     }
//     foto[i].classList.remove("sdvig");
//     console.log("!!")
// }
</script>
</body>
</html>


Что я пробовал, смешать каждый блок, что то не выходит так как нужно, так как по отдельности они смешаются но не друг за другом.
Смешать целый блок, но проблема в том что он смешается один раз на нужное расстояние а потом не понятно что делать, думал получить значение на сколько он сместился и прибавлять еще 50vw но на сколько я знаю js не знает таких значений.

Вообщем при нажатии на верхний квадраты, вперед назад левая половина двигается а правая стоит на месте.
Ответить с цитированием
  #2 (permalink)  
Старый 10.06.2020, 06:03
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668



Вот может быть понятнее будет

https://skr.sh/s2bio7lgGbM
Ответить с цитированием
  #3 (permalink)  
Старый 10.06.2020, 09:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Сергей Ракипов,
а можно как-то совсем просто объяснить, что хотите сделать?
Ответить с цитированием
  #4 (permalink)  
Старый 10.06.2020, 12:40
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

Две кнопки

.sledushay
.prededushay


есть блоки

<div class="foto"></div>
<div class="foto"></div>
<div class="foto"></div>
<div class="foto"></div>
<div class="foto"></div>


они должны сменять друг друга

нажимаешь .sledushay блок смешается влево
нажимаешь .prededushay блок смешается вправо

все идет по кругу.

Смена идет анимацией что один блок смешает другой.
"translateX(" + "-50" + "vw)";
Ответить с цитированием
  #5 (permalink)  
Старый 10.06.2020, 13:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Сергей Ракипов,
это слайдер на два фото?
Ответить с цитированием
  #6 (permalink)  
Старый 10.06.2020, 13:33
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

рони,
Планируется что будет смещаться блок в котором будет и фото, и текст и разные блоки. Блок занимает 100vh и ширина 50vw
И этих блоков может быть штук 30
Ответить с цитированием
  #7 (permalink)  
Старый 10.06.2020, 14:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

слайдер на половину окна
Сергей Ракипов,
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    border: none;
    outline: none;
    line-height: -.36em;
    font-size: 0;
    word-spacing: -.36em;
    zoom: 1;
}
:root{
    --tsvet_tekst: #fff;
}
body{
    font-family: Verdana, Geneva CY, Helvetica, DejaVu Sans, Arial, sans-serif;
    font-size: .8rem;
    line-height: 160%;
    position: relative;
}
.naivigat{
    position: fixed;
    top: 10px;
    left: calc(50% - 50px);
    width: 100px;
    height: 50px;
    z-index: 100;
    cursor: pointer;
    display: table;
}
.sledushay{
    width: 50px;
    height: 50px;
    background-color: #2e2e2e;
    display: inline-block;
}
.prededushay{
    width: 50px;
    height: 50px;
    background-color: gray;
    display: inline-block;
}
.portfolio_blok{
    display: grid;
    grid-template-columns: 50vw 50vw;
    grid-template-rows: 100vh;
    grid-template-areas: "danyi_blok foto_blok";
}
.danyi_blok{
    grid-area: danyi_blok;
    background-color: gray;
}
.foto_blok{
    grid-area: foto_blok;
    background-color: #2e2e2e;
    overflow: hidden;
    display: table;

}

.foto_blok_obertka{
    width: 250vw;
    display: flex;
    transform: translateX(var(--move, 0));
    transition: transform var(--duration, 1s) linear;
}
.foto{

    font-size: 30px;
    color: hsla(0, 0%, 100%, 1);
    text-align: center;
    line-height: 100vh;
}
.foto:nth-child(1){
    width: 50vw;
    height: 100vh;
    background-color:lightcoral;
}
.foto:nth-child(2){
    width: 50vw;
    height: 100vh;
    background-color:dodgerblue;
}
.foto:nth-child(3){
    width: 50vw;
    height: 100vh;
    background-color:darksalmon;
}
.foto:nth-child(4){
    width: 50vw;
    height: 100vh;
    background-color:cadetblue;
}
.foto:nth-child(5){
    width: 50vw;
    height: 100vh;
    background-color:burlywood;
}

</style>
    <title>Document</title>
</head>
<body>
    <div class="naivigat">
        <div class="sledushay"></div>
        <div class="prededushay"></div>
    </div>
 <div class="portfolio_blok">
     <div class="danyi_blok">
        <div class="info_1">

        </div>
     </div>
     <div class="foto_blok">
        <div class="foto_blok_obertka">
            <div class="foto">1</div>
            <div class="foto">2</div>
            <div class="foto">3</div>
            <div class="foto">4</div>
            <div class="foto">5</div>
        </div>
     </div>
 </div>
<script>
"use strict"

const sledushay = document.querySelector(".sledushay");
const prededushay = document.querySelector(".prededushay");
const fotoBlokObertka = document.querySelector(".foto_blok_obertka")
const foto = document.querySelectorAll(".foto");
let i = 0;

let setIndex = up => i = (i + up + foto.length) % foto.length;

sledushay.addEventListener("click", function () {
    setIndex(1);
    fotoBlokObertka.style.setProperty("--duration", `${i ? 1 : 0}s`);
    fotoBlokObertka.style.setProperty("--move", `${-i * 50}vw`);
})
prededushay.addEventListener("click", function () {
    setIndex(-1);
    fotoBlokObertka.style.setProperty("--duration", `${i == foto.length - 1 ? 0 : 1}s`);
    fotoBlokObertka.style.setProperty("--move", `${-i * 50}vw`);
})


</script>
</body>
</html>
Ответить с цитированием
  #8 (permalink)  
Старый 10.06.2020, 15:06
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

рони,
Завтра с утра сяду разбираться, так не много пробежался и часть понятно, часть нет.
Но вот это я совсем не понял

let setIndex = up => i = (i + up + foto.length) % foto.length;

как это понять?
Ответить с цитированием
  #9 (permalink)  
Старый 10.06.2020, 15:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Сообщение от Сергей Ракипов
как это понять?
https://javascript.ru/forum/css-html...tml#post525601
Ответить с цитированием
  #10 (permalink)  
Старый 11.06.2020, 04:53
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

рони,
Как всегда огромное спасибо.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Показывать по 5 блоков Meduzaweb Общие вопросы Javascript 2 29.03.2018 16:07
Скрипт выравнивания высоты блоков razorg1991 Элементы интерфейса 13 15.01.2017 00:04
Расчитать кол-во блоков при прокрутки. ureech Элементы интерфейса 4 18.11.2016 14:10
Скрипт карусели блоков rozmakc Работа 3 25.07.2016 21:35
Печать невидимых блоков mixeeff Events/DOM/Window 7 11.03.2009 11:41