2017-06-12 81 views
2

我遇到了我创建的预加载器的问题。 这仅仅是一个简单的面膜效果,看起来像这样:CSS Scale在转换时会导致锯齿状的边缘

(function() { 
 
    'use strict'; 
 

 
    setTimeout(function() { 
 
    document.body.className = 'loaded'; 
 
    }, 3000); 
 
})();
#loader-wrapper { 
 
    position: fixed; 
 
    top: 0; 
 
    left: 0; 
 
    width: 100%; 
 
    height: 100%; 
 
    z-index: 1000; 
 
} 
 

 
#loader-wrapper .loader-background { 
 
    position: fixed; 
 
    top: 0; 
 
    width: 100%; 
 
    height: 100%; 
 
    z-index: 1000; 
 
    background-color: #000000; 
 
} 
 

 
#loader-wrapper .loader-background::after { 
 
    content: ''; 
 
    position: absolute; 
 
    left: 150px; 
 
    bottom: 150px; 
 
    border-radius: 100%; 
 
    width: 150px; 
 
    height: 150px; 
 
    box-shadow: 0px 0px 0px 2000px #000000; 
 
    -webkit-transition: all 3s; 
 
    -moz-transition: all 3s; 
 
    transition: all 3s; 
 
} 
 

 
.loaded #loader-wrapper { 
 
    visibility: hidden; 
 
} 
 

 
.loaded #loader-wrapper .loader-background::after { 
 
    -webkit-transform: scale(20); 
 
    -moz-transform: scale(20); 
 
    -ms-transform: scale(20); 
 
    transform: scale(20); 
 
} 
 

 
.loaded #loader { 
 
    opacity: 0; 
 
    -webkit-transition: all 0.3s ease-out; 
 
    transition: all 0.3s ease-out; 
 
} 
 

 
@-webkit-keyframes spin { 
 
    0% { 
 
    -webkit-transform: rotate(0deg); 
 
    /* Chrome, Opera 15+, Safari 3.1+ */ 
 
    -ms-transform: rotate(0deg); 
 
    /* IE 9 */ 
 
    transform: rotate(0deg); 
 
    /* Firefox 16+, IE 10+, Opera */ 
 
    } 
 
    100% { 
 
    -webkit-transform: rotate(360deg); 
 
    /* Chrome, Opera 15+, Safari 3.1+ */ 
 
    -ms-transform: rotate(360deg); 
 
    /* IE 9 */ 
 
    transform: rotate(360deg); 
 
    /* Firefox 16+, IE 10+, Opera */ 
 
    } 
 
}
<h1>This content is visible when the circle exapnds</h1> 
 
\t <div id="loader-wrapper"> 
 
\t \t <div id="loader"></div> 
 
\t \t <div class="loader-background"></div> 
 
\t </div>

我创建了一个codepen所以你可以看到这个问题:

https://codepen.io/r3plica/pen/rwLagV

(注意,这是在铬)

+0

你可能会试一下blured有点阴影:'box-shadow:0px 0px 0px 2000px#000000,inset 0 0 5px#000000;'https://codepen.io/anon/pen/YQWyOz –

回答

2

这是因为你正在一个小的位图,然后将其扩展。如果我们以相反的方式来做,边缘会变得平滑。

原始圆圈呈现非常小,然后缩放到其原始大小的20倍。您看到的锯齿状边缘是原始像素!

以下是使用box-shadow作为遮罩效果的更新。技术是相同的 - 呈现最大的状态,然后在3秒内缩放。

(function() { 
 
    'use strict'; 
 

 
    setTimeout(function() { 
 
    document.body.className = 'loaded'; 
 
    }, 500); 
 
})();
#loader-wrapper { 
 
    position: fixed; 
 
    top: 0; 
 
    left: 0; 
 
    width: 100%; 
 
    height: 100%; 
 
    z-index: 1000; 
 
} 
 

 
#loader-wrapper .loader-background { 
 
    position: fixed; 
 
    top: 0; 
 
    width: 100%; 
 
    height: 100%; 
 
    z-index: 1000; 
 
    background-color: #000000; 
 
} 
 

 
#loader-wrapper .loader-background::after { 
 
    content: ""; 
 
    position: absolute; 
 
    border-radius: 100%; 
 
    top: -750px; 
 
    right: 0; 
 
    width: 2000px; 
 
    height: 2000px; 
 
    box-shadow: 0 0 0 10000px #000000; 
 
    transition: all 3s; 
 
    transform: scale(0.1); 
 
    /* Start off-screen */ 
 
} 
 

 
.loaded #loader-wrapper { 
 
    visibility: hidden; 
 
} 
 

 
.loaded #loader-wrapper .loader-background::after { 
 
    transform: scale(1); 
 
}
<h1>Updated text</h1> 
 
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Facilis eos modi expedita eius ab totam aspernatur fuga, rem assumenda deleniti?</p> 
 

 
<div id="loader-wrapper"> 
 
    <div id="loader"></div> 
 
    <div class="loader-background"></div> 
 
</div>

值是有点粗糙,并且可能需要一些调整,以适应你的使用情况。全屏擦除将需要比此更大的盒阴影和结尾半径。

+0

啊,我想这是因为这个原因,但我应该提到。我使用盒子阴影的原因是因为它揭示了下面的内容。我已经更新了我的codepen,所以你可以看到我的意思 – r3plica

+0

@ r3plica啊我现在看到,更新我的答案使用盒子阴影。 – Scott

相关问题