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

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

24.07.2018, 10:21. Показов 1195. Ответов 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
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru