Эксперт JS
 Аватар для DrType
6553 / 3624 / 1075
Регистрация: 07.09.2019
Сообщений: 5,877
Записей в блоге: 1

Странный эффект при анимации

19.12.2019, 19:40. Показов 1314. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не знаю, какой заголовок был бы более информативным.

Код такой:
PHP/HTML
1
2
3
4
5
6
7
<div style="margin-left:100px">
<div id="but"><b>X</b></div>
<div class="t" id="trans"></div>
<div class="t" id="trans1"></div>
<div class="t" id="trans2"></div> 
<div class="t" id="trans3"></div>
</div>
CSS
1
2
3
4
5
6
.t{position:absolute; height:500px; width:400px}
#trans{z-index:2; background-color:#ffffff;}
#trans1{margin-left:50px;  z-index:1;  background-color:#cccccc}
#trans2{margin-left:100px;  z-index:0; background-color:#aaaaaa}
#trans3{margin-left:150px; z-index:-1; background-color:#444444}
#but{display:none; margin-left:-100px}
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 const trans=document.getElementById("trans");
const trans1=document.getElementById("trans1") ;
const trans2=document.getElementById("trans2");
const trans3=document.getElementById("trans3");
const x=document.getElementById("but");
/*Для каждого блока вводим свой счётчик:*/
trans.j=0;
trans1.j=0;
trans2.j=0;
trans3.j=0;
/*Анимация:*/
function tr(block){setTimeout(function(){requestAnimationFrame(function(){tr(block)});  if(block.j<=80){block.style.transform="perspective(700px) translateX("+-(block.j)*2+"px)  rotateY("+-(block.j)+"deg)"; block.j++} /**/ }, 20)};//конец анимации.
let arr=[trans3, trans2, trans1, trans]; 
for (let div of arr){div.style.marginTop=arr.indexOf(div)*-50+150+"px"; div.innerHTML="Lorem ipsum dolor met"};
for(let n=0; n<arr.length-1; n++){arr[n].addEventListener("click", ()=>{x.style.display="inherit"; for(let bl of arr.slice(n+1)){tr(bl); bl.j=0};})};
/*по клику на x всёдолжно вернуться в исходное состояние:*/
x.addEventListener("click", ()=>{for(let block of arr){block.style.transform="perspective(0px) rotateY(0deg) translateX(0px)"; block.j=81}; })
И вроде как всё работает. Но после клика по блоку "x" анимация протекает странно: ускоренно, с наложениями блоков друг на друга.
Я хотел сделать так, чтобы после клика по "x" все блоки возвращались в исходное положение, и в дальнейшем вели себя как и прежде, до клика. Где ошибка? Или может быть, код вообще переписать?

Вот как всё это выглядит: https://codepen.io/Berners-Lee/pen/GRgNrJe
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.12.2019, 19:40
Ответы с готовыми решениями:

Странный комбинационный эффект
В форме ввода имеются два textarea, причем в одно окно инфа вводится напрямую, а в другое - с использованием визуального редактора tiny_mce...

Эффект ластика при добавлении анимации к тексту
Есть флешка, при нажатии мышкой на верхней картинке она стирается и проявляется нижняя картинка. При добавлении анимации к тексту, всё...

Эффект смещения или анимации
Не знаю как это назвать, даже не знаю на чем реализовано, CSS или JS , мой друг хочет на сайт такой эффект показа фона, не знаю как даже...

2
380 / 230 / 115
Регистрация: 22.11.2016
Сообщений: 379
19.12.2019, 22:44
Лучший ответ Сообщение было отмечено DrType как решение

Решение

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
        body { background-color: #ccccff; }
        #books {
            top: 100px;
            width: 100%;
            height: 400px;
            position: relative;
        }
        .book {
            position: absolute; 
            border: 6px solid black; 
            border-left: 1px solid black; 
            border-top-left-radius:15px; 
            border-bottom-left-radius:15px; 
            background: red;
            width: 300px;
            height: inherit;
            transition: transform 2s;
        }
        .transformation {
            transform: perspective(700px) translateX(-160px) rotateY(-80deg);
            transition: transform 2s;
        }
    </style>
</head>
<body>
    <button>Закрыть страницы</button>
    <div id="books">
        <div class="book">PAGE 1
            <p>Lorem ipsum dolor sit amet, consectetue. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et m eu pede mollis pretium.</p>
        </div>
        <div class="book">PAGE 2
            <p>Lorem ipsum dolor sit amet, consectetuer adipisccus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium.</p></div>
        <div class="book">3</div>
        <div class="book">4</div>
        <div class="book">5</div>
        <div class="book">6</div>
        <div class="book">7</div>
    </div>
    
 
    <script type="text/javascript">
        "use strict";
        function openAllPreviousSiblings(el) { // Функция для открытия предыдущих страниц (котрые перед страницей)
            let prev = el.previousElementSibling;
            if (prev) {
                prev.classList.add("transformation");
                openAllPreviousSiblings(prev);
            }
        }
        let books = document.querySelectorAll(".book");
        document.querySelector("button").addEventListener("click", () => { // Закрыть
            books.forEach(el => el.classList.remove("transformation"));
        });
        books.forEach((el, i, arr) => { // сдвигаем страницы и устанавливаем события.
            el.style = `right: ${50 - i * 1.5}%; z-index: ${arr.length - i}`; // z-index и right
            el.addEventListener("click", () => {
                openAllPreviousSiblings(el); // Если нажали на перед - открываются предыдущие страницы.
                // if (!el.previousElementSibling) el.classList.add("transformation");
            });
        });
    </script>
</body>
</html>
2
Эксперт JS
 Аватар для DrType
6553 / 3624 / 1075
Регистрация: 07.09.2019
Сообщений: 5,877
Записей в блоге: 1
20.12.2019, 00:59  [ТС]
fixeri, это здорово!
То есть, основная идея в том, что анимация осуществляется средствами CSS, а запускается путём добавления элементу класса с соответствующим стилевым правилом. Соответственно, «закрытие» страниц осуществляется исключением элемента из класса.

И вообще здорово — функция openAllPreviousSiblings определена рекурсивно, и т. д. ...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.12.2019, 00:59
Помогаю со студенческими работами здесь

Эффект ожидания перед воспроизведением анимации
Здравствуйте форумчане, хочу обратиться с незаурядной для меня проблемой. Думаю существует супер легкое решение. Но ничего придумать не...

Эффект анимации для фоновой картинки в слайдере
Добрый день! Подскажите, как добавить эффект для фоновой картинки каждому активному слайду в плагине owl.carousel.js Пробую...

Странный doc(rtf) файл (совсем странный)
Добрый день, сегодня на работе столкнулся с очень странным .doc файлом. 3 страницы - вес 45,9 МБ. &quot;Что за черт&quot; -думаю я....

Как сделать эффект размытия (эффект стекла) в Xaml?
Как сделать эффект размытия(эффект стекла) в Xaml?

Старт анимации не при старте программы, а при нажатии кнопки
Всем привет, как можно переделать нижеприведённый код чтобы анимация срабатывала не при старте программы а при нажатии кнопки? import...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru