2017-06-12 117 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

相關問題