CSS-3转换错误,菜单出现卡住
CSS-3 Transform bug, menu appearing stuck
我正在使用这个名为transit.js的插件来创建一个简单的菜单动画,基本上我有以下菜单,如下所示:
菜单打开和关闭的代码如下:
$('.main-header .nav-toggle-button').on('click' , function() {
// $('.main-header .navigation').toggleClass('show');
if ($('.main-header .navigation').hasClass('show')) {
$('.main-header .navigation').stop().removeClass('show');
return false;
}
$('.main-header .navigation').stop().transition({
perspective: '1000px',
rotateY: '180deg',
duration : 0
}, function() {
$(this).addClass('show').stop().transition({ rotateY: '0' });
});
return false;
});
在这里演示,(很抱歉,小提琴没有重现这个问题。)
BUG:正如你在关闭时看到的那样,没有动画,菜单消失了,现在当页面滚动超过
200px+
和低于992px
的宽度,所以基本上当你点击汉堡包,菜单以旋转动画打开,但当您再点一次汉堡,菜单有时也关不上"show"类已从菜单中删除。
这是我无法理解的错误之一,在控制台中检查和浏览JS代码并没有真正的帮助。
如果有人能指出我在这里做错了什么,我将不胜感激,因为JS和CSS看起来确实很完美,但使用transit的CSS转换并没有像预期的那样工作。
如前所述,这似乎是一个Chrome错误,我尝试在您的演示中编辑CSS,这个解决方案似乎有效。。。尝试在-1中添加一个"z索引":
@media (max-width: 992px)
.navigation {
display: none;
position: absolute;
top: 100%;
left: 0;
right: 0;
background: #fff;
background: rgba(255,255,255,.95);
z-index: -1; // ADD THIS
}
问题的替代解决方案。。
我发现的问题是,在较小的屏幕上,点击汉堡图标就会出现你的迷你菜单。但当再次点击汉堡图标时,它并没有消失。
但是,如果滚动窗口,它会立即消失。因此,我在if
语句中添加了两行,这两行实际上向下滚动窗口1px
,然后向上滚动1px
(以保持文档的位置不变)。在if
语句中添加以下代码(在return false;
行之前)。
window.scrollBy(0, 1);
window.scrollBy(0, -1);
我认为你的错误是你使用hover
事件来添加和删除动画,他只是在你的鼠标悬停在元素上时触发:
/* dropdown */
$('.navigation .dropdown-menu-item').hover(function() {
$('.navigation .dropdown-menu-item').find('.dropdown-menu-list').removeClass('opened');
$(this).find('.dropdown-menu-list').stop().transition({ 'y' : '20px' , duration: 0 } , function() {
$(this).addClass('opened').stop().transition({ 'y': 0 });
});
return false;
}, function() {
$(this).find('.dropdown-menu-list').removeClass('opened');
});
使用mouseenter
和mouseleave
事件来添加和删除下拉列表动画,通过这种方式,您将使事件结束并离开:
$(document).on('.navigation .dropdown-menu-item', 'mouseenter', function(){
$('.navigation .dropdown-menu-item').find('.dropdown-menu-list').removeClass('opened');
$(this).find('.dropdown-menu-list').stop().transition({ 'y' : '20px' , duration: 0 } , function() {
$(this).addClass('opened').stop().transition({ 'y': 0 });
});
return false;
})
$(document).on('.navigation .dropdown-menu-item', 'mouseleave', function(){
$(this).find('.dropdown-menu-list').removeClass('opened');
})
这是css解决方案。。。有了这个,你的菜单将顺利打开和关闭
将以下css添加到您的代码中并覆盖wright
@media(max-width:991px) {
.navigation {
transition: all 0.4s;
-webkit-transition: all 0.4s;
display: block;
transform: rotateY(90deg) !important;
-webkit-transform: rotateY(90deg) !important;
perspective: 1000px !important;
-webkit-perspective: 1000px !important;
opacity: 0;
visibility: hidden;
}
.navigation.show {
display: block;
opacity: 1;
transform: rotateY(0deg) !important;
-webkit-transform: rotateY(0deg) !important;
visibility: visible;
}
}
享受。。。
- 将JavaScript弹出菜单转换为警报框
- 如何将JSON转换为HTML下拉菜单
- Jquery菜单转换
- 下拉菜单转换为单选按钮,不再触发特定功能
- jQuery:将按钮过滤器转换为选择菜单选项
- CSS-3转换错误,菜单出现卡住
- 转换UL->li inot为同位素过滤菜单选择的列表
- 使用css转换的带有Bootstrap和jquery的菜单
- 旧的LeftNav菜单样式和Reactjs的可组合菜单样式之间的材质ui转换
- 在jquery中通过切换类和css转换来创建移动菜单
- 将引导选项卡栏转换为移动大小的手风琴菜单
- 将我的 html 破折号菜单转换为 php
- 多级响应菜单..移动和非移动之间的转换
- 如何将html菜单转换为WordPress菜单(WordPress)
- 如何将带有垂直子菜单的水平菜单转换为带有子菜单的垂直手风琴菜单
- 将普通桌面菜单转换为选择选项菜单(用于移动版本)
- 一旦选定值,如何将下拉菜单转换为标签.再次转换为按钮的下拉按钮
- 如何将垂直菜单转换为手风琴菜单
- 如何在javascript中将菜单转换为多维关联数组
- jQuery datepicker:将选择下拉菜单转换为ul