用CSS3實現鏤空的簡單動畫效果


   我只是想實現一個類似迪士尼早期動畫那樣,一張圖片從一個逐漸擴大的圓中鑽出來的效果,沒想到實際做起來卻很復雜。

 自己研究半天,結果除了一個土辦法之外,其他的統統不合適,我沒有在原生css中找到一個可以“擊穿”其他元素的方式。后來網上看到一個辦法,他投機取巧地把border改得很大,起到一個遮罩層的效果。但這樣的話會影響其他元素的表現,哪怕放到最底層,也不能做到同時有兩個同樣的鏤空效果存在。

   最后我還是回歸了我的“土辦法”。先弄個div作為遮罩層,用overflow:hidden的方式,把border-radius改為50%,這就有了個能蓋住多余部分的圓。里面塞張圖片,然后用transition把遮罩層的width和height從1變到圖像的尺寸。 然而這個土辦法最蠢的部分在於,你需要同時“拉動”遮罩層和圖片的位置,不然由小放大是從左上角而不是中間開始的。我嚴重懷疑這種同時進行的變化效果特別消耗資源,不過實際做出來以后我的感觸是----我至少做出來了-----而且它看起來還湊合:)。

   開始我還擔心這會犧牲居中自適應效果,后來這也被簡單地避免了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="src/js/jquery-3.1.1.min.js"></script>
    <link rel="stylesheet" href="src/css/test.css">
</head>
<body style="background-color: #4cae4c">
    <div id="container">
        <div id="layer">
            <img src="src/img/11.png" id="photo">
        </div>
    </div>
    <script>$(function(){
        var $layer=$("#layer"),$photo=$("#photo");
        $layer.css({"width":"300px","height":"300px","margin-left":"-150px","margin-top":"-150px"});
        $photo.css({"margin-left":"150px","margin-top":"150px"});
    });
    </script>
</body>
</html>

 

#layer{
    position:absolute;
    border-radius: 50%;
    overflow: hidden;
    width:1px;
    height:1px;
    transition:all 1s ease-out;
}
#container{
    top:200px;
    left:50%;
    position:relative;
}
#photo{
    position:absolute;
    transition:all 1s ease-out;
    left:-150px;
    top:-150px;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM