Najprostszym sposobem wykonania tej czynności jest utworzenie maski z okrągłym otworem, a następnie animacja prostokąta za nią. Np
<path fill="#fff" fill-rule="evenodd"
d="M0 0 200 0 200 200 0 200ZM20 100 A80 80 0 0 0 180 100 80 80 0 0 0 20 100Z"/>
Dane ścieżka tu rozpoczyna się kwadrat szeroki 200 jednostek (M0 0 200 0 200 200 0 200Z
), a następnie wykorzystuje dwa łuki zwrócić okrąg o średnicy 80 jednostek wewnątrz niego (A80 80 0 0 0 180 100 80 80 0 0 0 20 100Z
). Reguła wypełnienia evenodd
zapewnia wycięcie koła z kwadratu.
Jeśli chcesz krąg wypełnić od dołu do góry, a następnie będziesz musiał użyć rotate
Transformacja:
<rect transform="rotate(180 100 100)" x="20" y="20" width="160" height="0" fill="#47f" id="fillup"/>
Ten układ współrzędnych obraca się wokół środkowej części obrazu SVG tak że rect rośnie, gdy zwiększasz jego wysokość. Tutaj używam przejścia CSS, aby zmienić wysokość prostokąta po najechaniu na niego kursorem myszy. Ale możesz użyć Javascript lub JQuery, aby zmienić wysokość na dowolną.
Oto przykład praca:
svg #fillup { height:0px; transition:height 0.5s; }
svg:hover #fillup { height:160px; }
<svg width="200" height="200" viewBox="0 0 200 200">
<rect x="10" y="10" width="180" height="180" fill="#eee"/>
<rect transform="rotate(180 100 100)" x="20" y="20"
width="160" height="0" fill="#47f" id="fillup"/>
<path fill="#fff" fill-rule="evenodd"
d="M0 0 200 0 200 200 0 200ZM20 100 A80 80 0 0 0
180 100 80 80 0 0 0 20 100Z"/>
<circle cx="100" cy="100" r="90" fill="none" stroke="#888"
stroke-width="20"/>
<circle cx="100" cy="100" r="99" fill="none" stroke="#333"
stroke-width="1"/>
<circle cx="100" cy="100" r="80" fill="none" stroke="#333"
stroke-width="1"/>
</svg>
Dzięki Holger Czy ... jesteś bestią w svg ... –
Czy jest jakiś sposób na zrobienie tego z css? Użyłem twojego przykładu i pokochałem go, ale potem dowiedziałem się, że IE nie obsługuje SMIL – gkkirsch