С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
2 / 2 / 0
Регистрация: 10.12.2017
Сообщений: 43

Не получается сделать "анимацию" меню с кнопки

24.07.2018, 10:21. Показов 1192. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть кнопка, по нажатию на которой вылезает меню (аккордеон?). Так вот. Пытаюсь сделать так, чтобы во время пока кнопка делает своё " rotate(360deg) " и превращается в "active", менюшка не просто так появлялась а как бы "выползала" из-за кнопки и обратно.
В интернетах нашел что просто нужно поставить transform или transition в css, но я пробовал не получилось. В прочем пробовал не только это.
Вот чувствую что я где-то рядом...
Прошу помощи гуру-програмистов!

Вот мой Супер-Кодище!!!

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<div id="nav" class="nav" >
            <ul>
                <li><a href="#">Home</a></li>
                <li><a href="#">About</a>
                    <ul>
                        <li><a href="#">Our team</a></li>
                        <li><a href="#">History</a></li>
                    </ul>
                </li>
            <li><a href="#">Clients</a></li>
            <li><a href="#">Contact Us</a></li>
            </ul>
</div>
<div id="btn" class="button" onclick="my_f(nav)"></div>
<script src="JS.js"></script>

CSS
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/* menu call button */
.button {
display:block;
width: 70px;
height: 70px;
border-radius: 50%;
margin-left:20px; 
margin-top:20px;
transition: 0.45s ease-in-out;
background: radial-gradient(farthest-side ellipse at top left, white, #aaaaaa);
box-shadow:     inset 0 -3px 10px rgba(140, 140, 140,1), 
        inset 0 3px 10px rgba(0,0,0,.4),        
        0 2px 4px rgba(0,0,0,.9);           
}
 
 
.button:not(.activated):hover {
background: radial-gradient(farthest-side ellipse at top left, white, #c4c2c2);
}
 
.button:active {
  background: url("images/icon.png") , radial-gradient(farthest-side ellipse at top left, #eb7fff, #c56bd6);
  transform: rotate(360deg);
  box-shadow:
   0 0px 10px rgba(0,0,0,.5) inset,
   0 2px 50px rgba(0,0,0,.5) inset,
   0 2px 10px rgba(255,255,255,.1);
}
 
 
.activated {
  background: url("images/icon.png") , radial-gradient(farthest-side ellipse at top left, #eb7fff, #c56bd6);
  transform: rotate(360deg);
  box-shadow:
   0 0px 10px rgba(0,0,0,.5) inset,
   0 2px 50px rgba(0,0,0,.5) inset,
   0 2px 10px rgba(255,255,255,.1);
}
 
/*--------------------------------------------------------------------------------------------------------------------*/
 
/* main menu "accordion" */
 
menu{
  padding: 0;
  margin: 0;
  font-family: 'Lato', sans-serif;
}
 
 
.nav{
  position: absolute;
  display: none;
  top: 21;
  left: 60;
  width: 90%;
  background: radial-gradient( 900px 200px at left,  #fff , #fff , rgba(235,49,49,0) ) ;
}
  .nav ul{
    list-style: none;
    position: relative;
    float: left;
    margin-left: 0;
    display: inline-table;
  }
    .nav ul li{
      float: left;
    }
 
    .nav ul li:hover{background: rgba(0,0,0,.15);}
    .nav ul li:hover > ul{display: block;}
    .nav ul li{
      float: left;
      transition: .3s ease-in-out;
    }
      .nav ul li a {
        display: block; 
        padding: 7px 30px;
        color: #222; 
        font-size: 1em;
        letter-spacing: 1px;
        text-decoration: none;
        text-transform: uppercase;
      }
      .nav ul li a:hover{
        text-shadow:-1px 1px 1px #000000;
        transition: .3s ease;
      }
 
 
      .nav ul ul{
        display: none;
        background: #fff;
        position: absolute; 
        top: 100%;
        box-shadow: -5px 3px 6px -2px rgba(0,0,0,.3);
        border: 1px solid rgba(0,0,0,.1);
      }
        .nav ul ul li{float: none; position: relative; right: 40px;}
          .nav ul ul li a {
            padding: 15px 30px; 
            border-bottom: 1px solid rgba(0,0,0,.05);
          }
JavaScript
1
2
3
4
5
6
7
8
document.querySelector('.button').addEventListener('click',function(button){
  this.classList.toggle("activated");
});
 
function my_f(nav) {
    var object = document.querySelector('.nav');
    object.style.display == 'block' ? object.style.display = 'none' : object.style.display = 'block';
};
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.07.2018, 10:21
Ответы с готовыми решениями:

Не получается сделать резиновые кнопки меню
прошу помощи в следующей ситуации. необходимо сделать кнопочки как в меню этого сайта http://www.plushtoys.ru/ то есть чтобы...

Нужно сделать переход или как анимацию кнопки
Хочу сделать анимацию кнопки. Не знаю какой компонент взять, можно ли на Timage, TBitBtn? К примеру как: Есть изображение кнопки, это и...

Не получается сделать кнопки скачивания
Не могу понять как сделать кнопки для скачиваний изображений с сайта. Постоянно вылетают разные ошибки. Может есть у кого ссылка на...

6
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
24.07.2018, 15:02
скороход,
Делать такие вещи конечно же самому нужно учитывая все нюансы... но если тебе сойдет то вот:
https://fiddle.jshell.net/zloj... d3/1/show/
HTML5
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
<body>
 
<div id="nav" class="nav" >
    <ul class="moveThis">
        <li><a href="#">Home</a></li>
        <li><a href="#">About</a>
            <ul>
                <li><a href="#">Our team</a></li>
                <li><a href="#">History</a></li>
            </ul>
        </li>
        <li><a href="#">Clients</a></li>
        <li><a href="#">Contact Us</a></li>
    </ul>
</div>
<div id="btn" class="button" onclick="my_f(nav)"></div>
 
<script>
    document.querySelector('.button').addEventListener('click',function(){
        this.classList.toggle("activated");
    });
     
    function my_f(nav) {
        var moveThis = document.querySelector('.moveThis'), nav = document.querySelector('.nav'), button = document.querySelector('.button');
        (button.classList.contains('activated')) ? moveThis.style.marginLeft = '-530px' : moveThis.style.marginLeft = '30px';
    };
</script>
 
</body>
CSS
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/* menu call button */
ul{
    transition: 0.5s;
}
.button {
        position:  relative;
        z-index: 1;
        display:block;
        width: 70px;
        height: 70px;
        border-radius: 50%;
        margin-left: 0px;
        margin-top: -71px;
        transition: 0.45s ease-in-out;
        -in-out;
        background: radial-gradient(farthest-side ellipse at top left, white, #aaaaaa);
        box-shadow:     inset 0 -3px 10px rgba(140, 140, 140,1), 
        inset 0 3px 10px rgba(0,0,0,.4),        
        0 2px 4px rgba(0,0,0,.9);
        }
 
 
.button:not(.activated):hover {
background: radial-gradient(farthest-side ellipse at top left, white, #c4c2c2);
}
 
.button:active {
  background: url("images/icon.png") , radial-gradient(farthest-side ellipse at top left, #eb7fff, #c56bd6);
  transform: rotate(360deg);
  box-shadow:
   0 0px 10px rgba(0,0,0,.5) inset,
   0 2px 50px rgba(0,0,0,.5) inset,
   0 2px 10px rgba(255,255,255,.1);
}
 
 
.activated {
  background: url("images/icon.png") , radial-gradient(farthest-side ellipse at top left, #eb7fff, #c56bd6);
  transform: rotate(360deg);
  box-shadow:
   0 0px 10px rgba(0,0,0,.5) inset,
   0 2px 50px rgba(0,0,0,.5) inset,
   0 2px 10px rgba(255,255,255,.1);
}
 
/*--------------------------------------------------------------------------------------------------------------------*/
 
/* main menu "accordion" */
 
menu{
  padding: 0;
  margin: 0;
  font-family: 'Lato', sans-serif;
}
 
 
.nav{
  position: relative;
  width: 90%;
  height: 70px;
  /* background: #999; */
  overflow:  hidden;
  /* z-index: -1; */
  margin: 0px  0px  0px  2px;
}
  .nav ul{
    width: 100%;
    height:  70px;
    list-style: none;
    position: relative;
    margin: 20px  0px  0px  -500px;
    z-index: 1;
  }
    .nav ul li{
      float: left;
    }
 
    .nav ul li:hover{background: rgba(0,0,0,.15);}
    .nav ul li:hover > ul{display: block;}
    .nav ul li{
      float: left;
      transition: .3s ease-in-out;
    }
      .nav ul li a {
        display: block; 
        padding: 7px 30px;
        color: #222; 
        font-size: 1em;
        letter-spacing: 1px;
        text-decoration: none;
        text-transform: uppercase;
      }
      .nav ul li a:hover{
        text-shadow:-1px 1px 1px #000000;
        transition: .3s ease;
      }
 
 
      .nav ul ul{
        display: none;
        background: #fff;
        position: absolute; 
        top: 100%;
        box-shadow: -5px 3px 6px -2px rgba(0,0,0,.3);
        border: 1px solid rgba(0,0,0,.1);
      }
        .nav ul ul li{float: none; position: relative; right: 40px;}
          .nav ul ul li a {
            padding: 15px 30px; 
            border-bottom: 1px solid rgba(0,0,0,.05);
          }
1
2 / 2 / 0
Регистрация: 10.12.2017
Сообщений: 43
24.07.2018, 16:28  [ТС]
Так-то все красиво и подход с более креативной стороны (это я про "moveThis"). Но! теперь "hover" неработат... походу из за "overflow" (на мой дилетантский взгляд)
0
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
25.07.2018, 00:02
Лучший ответ Сообщение было отмечено скороход как решение

Решение

Цитата Сообщение от скороход Посмотреть сообщение
теперь "hover" неработат
Могу предложить такой вариант:
Кликните здесь для просмотра всего текста
HTML5
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
<div id="nav" class="nav" >
<ul class="moveThis">
    <li><a href="#">Home</a></li>
    <li><a href="#">About</a>
        <ul>
            <li><a href="#">Our team</a></li>
            <li><a href="#">History</a></li>
        </ul>
    </li>
    <li><a href="#">Clients</a></li>
    <li><a href="#">Contact Us</a></li>
</ul>
</div>
<div id="btn" class="button" onclick="my_f(nav)"></div>
 
<script>
    document.querySelector('.button').addEventListener('click',function(){
        this.classList.toggle("activated");
    });
     
    function my_f(nav) {
        var moveThis = document.querySelector('.moveThis'), button = document.querySelector('.button');
        (button.classList.contains('activated')) ? moveThis.style.marginLeft = '-550px' : moveThis.style.marginLeft = '20px';
    };
</script>
CSS
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/* menu call button */
.moveThis{
    margin-left: -550px;
}
.button {
        display:block;
        width: 70px;
        height: 70px;
        border-radius: 50%;
        margin-left: 20px;
        margin-top:20px;
        transition: 0.45s ease-in-out;
        background: radial-gradient(farthest-side ellipse at top left, white, #aaaaaa);
        box-shadow:     inset 0 -3px 10px rgba(140, 140, 140,1), 
        inset 0 3px 10px rgba(0,0,0,.4),        
        0 2px 4px rgba(0,0,0,.9);
        position:  relative;
        z-index:  1;
        }
 
 
.button:not(.activated):hover {
background: radial-gradient(farthest-side ellipse at top left, white, #c4c2c2);
}
 
.button:active {
  background: url("https://www.cyberforum.ru/images/icon.png") , radial-gradient(farthest-side ellipse at top left, #eb7fff, #c56bd6);
  transform: rotate(360deg);
  box-shadow:
   0 0px 10px rgba(0,0,0,.5) inset,
   0 2px 50px rgba(0,0,0,.5) inset,
   0 2px 10px rgba(255,255,255,.1);
}
 
 
.activated {
  background: url("https://www.cyberforum.ru/images/icon.png") , radial-gradient(farthest-side ellipse at top left, #eb7fff, #c56bd6);
  transform: rotate(360deg);
  box-shadow:
   0 0px 10px rgba(0,0,0,.5) inset,
   0 2px 50px rgba(0,0,0,.5) inset,
   0 2px 10px rgba(255,255,255,.1);
}
 
/*--------------------------------------------------------------------------------------------------------------------*/
 
/* main menu "accordion" */
 
menu{
  padding: 0;
  margin: 0;
  font-family: 'Lato', sans-serif;
}
 
 
.nav{
  position: absolute;
  /* display: none; */
  top: 21;
  left: 60;
  width: 90%;
  /* background: radial-gradient( 900px 200px at left,  #fff , #fff , rgba(235,49,49,0) ); */
  /* background: #11223361; */
  height: 160px;
  margin-left: 20px;
  z-index:  0;
  overflow: hidden;
}
  .nav ul{
    list-style: none;
    position: relative;
    float: left;
    /* margin-left: 0px; */
    display: inline-table;
    transition: 0.5s;
  }
    .nav ul li{
      float: left;
    }
 
    .nav ul li:hover{background: rgba(0,0,0,.15);}
    .nav ul li:hover > ul{display: block;}
    .nav ul li{
      float: left;
      transition: .3s ease-in-out;
    }
      .nav ul li a {
        display: block; 
        padding: 7px 30px;
        color: #222; 
        font-size: 1em;
        letter-spacing: 1px;
        text-decoration: none;
        text-transform: uppercase;
      }
      .nav ul li a:hover{
        text-shadow:-1px 1px 1px #000000;
        transition: .3s ease;
      }
 
 
      .nav ul ul{
        display: none;
        background: #fff;
        position: absolute; 
        top: 100%;
        box-shadow: -5px 3px 6px -2px rgba(0,0,0,.3);
        border: 1px solid rgba(0,0,0,.1);
      }
        .nav ul ul li{float: none; position: relative; right: 40px;}
          .nav ul ul li a {
            padding: 15px 30px; 
            border-bottom: 1px solid rgba(0,0,0,.05);
          }

У стиля .nav все равно должен быть overflow: hidden потому что менюшка все равно должна "под что-то" скрываться- неудобно потому что .nav приходится делать по высоте подпунктов что бы они не уходили под перекрытие.
Есть конечно вариант сделать без такого костыля, но тогда основной блок должен находиться вплотную слева экрана что бы менюшке было куда скрываться.
Еще можно задействовать больше JS-кода и таких моментов как делать .nav по высоте подпунктов можно избежать, но это столько мороки- мне, если честно, лень
1
2 / 2 / 0
Регистрация: 10.12.2017
Сообщений: 43
25.07.2018, 08:50  [ТС]
Спасибо, буду пробовать А не подскажете где можно почитать по этой теме и вообшЭ по "жаваскрипту"?
0
2 / 2 / 0
Регистрация: 10.12.2017
Сообщений: 43
13.08.2018, 14:06  [ТС]
Решение найдено!
hover пашет, кнопка пашет, все пашет!
Не до конца уяснив способ решения, была заморочка с "бекграундом" самой меню, который не уходил с менюшкой.
В данном случае это решается просто!
(это для тех кому надо)
В moveThis пописываете свой бЕкгунт , и подгоняете как нужно.
вот так у меня:
CSS
1
2
3
4
5
6
7
.moveThis{
  margin-left: -870px;
  background: radial-gradient( 900px 200px at left,  #fff , #fff , rgba(235,49,49,0) ); 
  height: 69px;
  top: -17;
  width: 90%;
}
И вуаля! "задний-грунт" всасывается в кнопку вместе с меню. Для меня такой способ вполне пригоден.

Спасибо за решение товарищу zlojnaxa .
0
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
13.08.2018, 14:59
Цитата Сообщение от скороход Посмотреть сообщение
Спасибо за решение товарищу zlojnaxa
обращайся
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.08.2018, 14:59
Помогаю со студенческими работами здесь

Не получается сделать активное меню
Добрый вечер! Подскажите пожалуйста как можно сверстать активный пункт меню, чтобы было как на рис1. У меня получается текст чуть ниже, это...

Не получается сделать адаптивное меню
Здравствуйте. Долго парюсь, никак не могу сделать адаптивное меню на jqery. Без посторонней помощи не справлюсь, помогите пожалуйста -...

ни как не получается сделать меню:(
дело состоит в том что:друг создал меню в css(по задумке-наводищ на него курсив мыши и оно выпадается): DIV.dmenu .menu-item { ...

Не получается сделать меню с Dropdown
Не получается сделать меню с Dropdown. Мне нужно, чтобы тексты ссылки &quot;a&quot; в классе home__dropout не ехали на другой ряд, чтобы тексты...

Не получается сделать боковое меню
Ребят, подскажите как сделать чтобы при нажатии на шторку по середине правой стороны экрана, выдвигалось боковое меню,как на картинке,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru