2017-04-16 67 views
1

我正在处理导航栏动画。点击导航栏按钮时,红色的圆形div会进行缩放转换以覆盖所有页面。问题是我在边界放大时对模糊效果不好。我试着使用backface-visibility:hidden和translateZ(0)来修复它,但它似乎没有解决问题。为了更好地展示我的意思,我将转换时间设置为5秒。我正在使用chrome。防止模糊边界上的转换变换比例尺

$(".navbar_button").click(function(){ 
 
    if ($(this).hasClass("clicked")){ 
 
    $(this).removeClass("clicked"); 
 
    $("#bar1,#bar2,#bar2b,#bar3,.round_nav,.round_nav2").removeClass("open"); 
 
    
 

 
    
 
    } 
 
    
 
    else { 
 
    $(this).addClass("clicked"); 
 
    $("#bar1,#bar2,#bar2b,#bar3,.round_nav,.round_nav2").addClass("open"); 
 
    
 
    
 
    } 
 
});
@import url('https://fonts.googleapis.com/css?family=Crimson+Text'); 
 

 
body{ 
 
    margin:0px; 
 
    overflow: hidden; 
 
} 
 

 
.container{ 
 
    height:100vh; 
 
    width:100%; 
 
    background-color:#EEE9E9; 
 
    overflow: hidden; 
 
} 
 

 
.navbar_button{ 
 
    width:30px; 
 
    height:25px; 
 
    position:absolute; 
 
    top: 40px; 
 
    right: 40px; 
 
} 
 

 
.bar{ 
 
    position:absolute; 
 
    width:100%; 
 
    height:3px; 
 
    -webkit-border-radius: 12px; 
 
    -moz-border-radius: 12px; 
 
    border-radius: 12px; 
 
    background-color:white; 
 
    cursor: pointer; 
 
    display: block; 
 
    margin: 0; 
 
    -webkit-transition: .5s; 
 
    transition: .5s; 
 
} 
 

 
#bar1{ 
 
    top:0%; 
 
    left:0%; 
 
} 
 

 
#bar1.open{ 
 
    -webkit-transform: scaleX(0); 
 
    -webkit-transition: .5s; 
 
    transition: .5s; 
 
} 
 

 
#bar2{ 
 
    top:calc(50% - 4px); 
 
    -webkit-transform: rotate(0deg); 
 
    -webkit-transition: .5s; 
 
    transition: .5s; 
 
} 
 

 
#bar2.open{ 
 
    -webkit-transform: rotate(45deg); 
 
    -webkit-transition: .5s; 
 
    transition: .5s; 
 
} 
 

 
#bar2b{ 
 
    top:calc(50% - 4px); 
 
    -webkit-transform: rotate(0deg); 
 
    -webkit-transition: .5s; 
 
    transition: .5s; 
 
} 
 

 
#bar2b.open{ 
 
    -webkit-transform: rotate(-45deg); 
 
    -webkit-transition: .5s; 
 
    transition: .5s; 
 
} 
 

 
#bar3{ 
 
    top:calc(100% - 8px); 
 
    right:0%; 
 
} 
 

 
#bar3.open{ 
 
    -webkit-transform: scaleX(0); 
 
    -webkit-transition: .5s; 
 
    transition: .5s; 
 
} 
 

 
.round_nav{ 
 
    width:50px; 
 
    height:50px; 
 
    background-color: #FF4040; 
 
    position:fixed; 
 
    top:0px; 
 
    right:0px; 
 
    margin-top:25px; 
 
    margin-right:30px; 
 
    -webkit-border-radius: 50%; 
 
    -moz-border-radius: 50%; 
 
    border-radius: 50%; 
 
    -webkit-transition: .5s; 
 
    transition: .5s; 
 
    overflow: hidden; 
 
    
 
} 
 

 
.round_nav.open{ 
 
    transform: scale(60); 
 
    -webkit-transition: 5s; 
 
    transition: 5s; 
 
    
 
} 
 

 

 

 
.navbar_button:hover .round_nav{ 
 
    transform: translateZ(0); 
 
    -webkit-transform: scale(1.1); 
 
    
 
    
 
} 
 

 
.round_nav2.open{ 
 
    width:5000px; 
 
    height:5000px; 
 
    opacity:0; 
 
    margin-top:-2500px; 
 
    margin-right:-2500px; 
 
    -webkit-transition: all 1s ease; 
 
    transition: all 2s ease; 
 
    transition-delay:.1s; 
 
    -webkit-transition-delay:.1s; 
 
} 
 

 
.nav_content{ 
 
    position:absolute; 
 
    top:50%; 
 
    left:50%; 
 
    -webkit-transform: translate(-50%,-50%); 
 
    transform: translate(-50%,-50%); 
 
    padding-left:20px; 
 
    margin:0px; 
 
    width:120px; 
 
    height: 200px; 
 
    -webkit-transition: .2s; 
 
    transition: .2s; 
 
    
 
} 
 

 
.nav_content li{ 
 
    color: #EEE9E9; 
 
    font-size: 30px; 
 
    font-family: 'Crimson Text'; 
 
    margin-bottom: 10px; 
 
    letter-spacing: 2px; 
 
    cursor: pointer; 
 
    text-align: center; 
 
    -webkit-transition: .3s; 
 
    transition: .3s ; 
 
} 
 

 
.nav_content ul{ 
 
    list-style-type:none; 
 
    margin-left:10px !important; 
 
    margin-top:0px; 
 
    margin-bottom:0px; 
 
    padding:0px; 
 
    position:absolute; 
 
    left:2%; 
 
    top:0px; 
 
    -webkit-transition: .6s; 
 
    transition: .6s; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="container"> 
 
    <div class="round_nav2"> 
 
     
 
    </div> 
 
    
 
    <div class="round_nav"> 
 
     
 
    </div> 
 
    
 
    <div class="navbar_button"> 
 
    <span id="bar1" class="bar"></span> 
 
    <span id="bar2" class="bar"></span> 
 
    <span id="bar2b" class="bar"></span> 
 
    <span id="bar3" class="bar"></span> 
 
    </div> 
 
</div>

+0

不知道,但你不会仍然需要供应商的前缀?例如:'-webkit-backface-visibility:hidden;' –

+0

不,我刚刚尝试过。 – vlk

+0

http://stackoverflow.com/a/7021188/2872279 < - 这是怎么回事? – SamJakob

回答

2

这里的问题是,你跃上一个50像素宽的元件60倍,因此越来越jugged边缘。

做它周围的其他方法,在这里设置的默认大小3000px,并调整为0.0167,然后在点击,它扩展到1

因为你的CSS是有点乱我只显示2主要规则,但您可能需要调整更多的属性。

.round_nav{ 
    width:3000px; 
    height:3000px; 
    transform: scale(0.0167); 
    transform-origin: right top; 
    ... 
} 

.round_nav.open{ 
    transform: scale(1); 
    ... 
} 
+0

谢谢,它的工作原理。我刚刚调整了保证金以加入正确的圈子位置。我只是编辑你的答案改变transform:scale(0)来转换:scale(1) – vlk

+0

@vlk批准你的编辑...并且它出色了 – LGSon