有誰知道如何在SVG中定義一個動畫弧/圓,使得弧開始於0度並以360度結束?在SVG中定義一個圓弧/弧形動畫
回答
你可以畫爲「手動」使用路徑的了lineTo並計算弧的位置:
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"
viewBox="0 0 1200 800"
preserveAspectRatio="xMidYMid"
style="width:100%; height:100%; position:absolute; top:0; left:0;"
onload="drawCircle();">
<script>
function drawCircle() {
var i = 0;
var circle = document.getElementById("arc");
var angle = 0;
var radius = 100;
window.timer = window.setInterval(
function() {
angle -=5;
angle %= 360;
var radians= (angle/180) * Math.PI;
var x = 200 + Math.cos(radians) * radius;
var y = 200 + Math.sin(radians) * radius;
var e = circle.getAttribute("d");
if(i==0) {
var d = e+ " M "+x + " " + y;
}
else {
var d = e+ " L "+x + " " + y;
}
if (angle === -5 && i !== 0) {
window.clearInterval(window.timer);
}
circle.setAttribute("d", d);
i++;
}
,10)
}
</script>
<path d="M200,200 " id="arc" fill="none" stroke="blue" stroke-width="2" />
</svg>
謝謝räph。 我還是SVG的新手,並沒有使用過
一種方法是使用一個圓,併爲stroke-dashoffset設置動畫(您也需要'stroke-dasharray')。這樣一個動畫的例子(不是用圓圈,但同樣的原則適用)可以看到here。
另一個選擇是使用路徑動畫和arc path segments來進行路徑之間的動畫/變形,請參閱example。
謝謝埃裏克 - 鏈接到http://www.carto.net/papers/svg/samples網站向我展示了一些有趣的想法和技術的SVG動畫。 – GarethOwen 2010-07-16 08:19:49
感謝您的答案 - 這裏是關於爲什麼我要多一點信息在SVG中創建一個圓圈動畫:
我們有一個服務器客戶端應用程序。我計劃生成SVG圖像以表示服務器上的圖表(餅圖/條形圖)並將SVG發送給客戶端。 我們有Java和.NET客戶端。我將編寫客戶端代碼來解析和呈現從服務器接收到的SVG圖像。 我打算只使用SVG格式的一個子集 - 不超過我們需要代表我們的圖表,但動畫是一個要求。
長期來說,擁有一個ajax客戶端會很好 - 它可以在沒有Java或.NET運行時的瀏覽器上運行。這就是我選擇SVG格式的原因。
對於短期解決方案,我現在認爲我會將自己的元素添加到SVG中,使用開始和掃掠角定義弧。然後,我可以通過動畫掃描角度輕鬆定義所需的動畫,並使我的實現變得簡單。長期來說 - 如果我們真的想要增加一個AJAX/HTML客戶端 - 我將不得不重新實現並堅持SVG標準。
好的! 我很好奇:關於您的短期解決方案,當您聲明自己的svg元素時 - 您的客戶如何呈現這些元素?你解析你的xml並在本地繪製它們嗎? – 2010-07-16 12:34:40
是的,我將解析XML並使用本地圖形API繪製元素(在Java中爲Graphics2D,在.NET中爲GDI +)。 – GarethOwen 2010-07-16 14:13:07
您可能應該編輯您的問題而不是回答它。順便說一下;你可以使用半輪圈繪製弧;我的答案中的密碼顯示給你一個動畫。 – 2015-11-25 19:24:32
或許你會發現一個預先繪製圓發出所需的效果:
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000" width="400" height="400">
<rect x="0" y="0" width="1000" height="1000"/>
<circle cx="500" cy="500" r="500" fill="red"/>
<rect x="0" y="500" width="1000" height="500"/>
<rect x="0" y= "0" width="1000" height="500">
<animateTransform attributeName="transform" type="rotate" begin="0s" dur="5s" fill="freeze" from="0,500,500" to="180,500,500"/>
</rect>
</svg>
揭開這個圓圈是一個很酷的想法,我喜歡你的半圓案例。 – GarethOwen 2013-09-09 06:48:02
我當時也有點disapointed不能夠簡單地做出一個圓的弧百分比,或角度。現在,當我需要一個不是較長路徑一部分的弧時,我使用一個圓和筆畫Dasharray技巧來顯示這個圓的一部分。
svg {
outline: solid;
height: 100px;
width: 100px;
}
.arc {
fill: transparent;
stroke-width: 5;
stroke: red;
stroke-dasharray: 94.24778 219.91149;
}
<svg viewport="0 0 100 100">
<circle cx="50" cy="50" r="50" class="arc"></circle>
</svg>
你可以看到一個改進版本here其使用薩斯進行計算。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
<link rel="stylesheet" href="">
</head>
<body>
</body>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"
viewBox="0 0 1200 800"
preserveAspectRatio="xMidYMid"
style="width:100%; height:100%; position:absolute; top:0; left:0;"
onload="drawCircle();">
<script>
function drawCircle() {
// center point
var cX = 300,
cY = 300;
radius = 300,
p1 = {x: cX+radius, y: cY},
p2 = {x: cX-radius, y: cY},
circle = document.getElementById("arc"),
angle = 0;
window.timer = window.setInterval(
function() {
angle -= 5;
angle %= 360;
var radians= (angle/180) * Math.PI;
var x = cX + Math.cos(radians) * radius;
var y = cY + Math.sin(radians) * radius;
if (Math.abs(angle) < 180 && angle != 0)
d= 'M ' + p1.x + ',' + p1.y + ' A' + radius+ ',' + radius+ (Math.abs(angle)==180?' 0 1 0 ':' 0 0 0 ')+x+' '+y;
else
d= 'M ' + p1.x + ',' + p1.y + ' A' + radius+ ',' + radius+ ' 0 1 0 '+p2.x+' '+p2.y +
' M ' + p2.x + ',' + p2.y + ' A' + radius+ ',' + radius+ (Math.abs(angle)==0?' 0 1 0 ':' 0 0 0 ')+x+' '+y;
circle.setAttribute("d", d);
if (Math.abs(angle) == 0)
window.clearInterval(window.timer);
}
,10)
}
</script>
<path d="" id="arc" fill="none" stroke="blue" stroke-width="2" />
</svg>
</html>
還可以繪製使用circle
用手SVG及以下技術:
- 給了
circle
一個stroke
。 - 充分利用
stroke
dashed
以破折號長度等於圓的周長。 - 通過等於圓的圓周上的長度偏移量
stroke
。 - 動畫中風。
HTML:
<svg width="200" height="200">
<circle class="path" cx="100" cy="100" r="96" stroke="blue" stroke-width="4" fill="none" />
</svg>
CSS:
circle {
stroke-dasharray: /* circumference */;
stroke-dashoffset: /* circumference */;
animation: dash 5s linear forwards;
}
@keyframes dash {
to {
stroke-dashoffset: /* length at which to stop the animation */;
}
}
- 1. SVG:填充弧形動畫?
- 2. SVG圓弧區
- 3. SVG - 弧形動畫跳躍步驟
- 4. 爲什麼畫布在圓弧(圓弧)之間畫線?
- 5. 在圓上畫一條圓弧
- 6. 如何在Javafx中動畫圓弧
- 7. SVG橢圓弧與Java
- 8. SVG圓弧不是沿着橢圓
- 9. 如何在css動畫後修復圓弧邊界上的圓弧位置
- 10. Html 5畫布圓弧問題 - 圓弧被扭曲
- 11. 半圓圓弧滾動javascript
- 12. CAShapeLayer fillcolor圓弧動畫不起作用
- 13. Silverlight XAML圓弧段大小動畫
- 14. 用CABasicAnimation正確動畫圓弧半徑
- 15. 帶8弧的圓弧svg順時針和逆時針旋轉
- 16. 如何比較圓弧中的弧度?
- 17. 矩形和圓(或圓弧)的交集
- 18. 將SVG行轉換爲圓弧
- 19. svg - 對齊圓弧外的文字d3js
- 20. 圓弧時間
- 21. 與createJS弧動畫
- 22. 畫布中圓弧之間的空間
- 23. 提取弧/圓定義從B樣條
- 24. 插值線在d3中製作半個圓弧/弧線
- 25. 如何創建平滑的圓弧形動畫?
- 26. 我可以動畫一個圓弧的結束角度嗎?
- 27. 在three.js中繪製圓弧
- 28. SVG弧溜走,因爲它完成它的弧形
- 29. 圓弧正在繪製矩形
- 30. Tkinter綁定到圓弧
我想動畫後掠角,但在SVG電弧被定義使用起點和終點。 – GarethOwen 2010-07-15 15:12:33