2016-04-05 11 views
2

bende SVG kodu belgeyi görüntülemek: Bu harika çalışıyor ve bu haleDüzgün hizalamak için Javascript ile eklenen bir SVG'nin işaretçi ucunu nasıl alabilirim? Sonra html belgeye SVG'yi yazmak ve eğer düzgün hizalar

<html> 
<head> 
    <script type="text/javascript" src="jquery-1.12.2.min.js"></script> 
    <script type="text/javascript" src="script.js"></script> 
    <link rel="stylesheet" href="style.css" /> 
</head> 
<body> 

    <div id="stage"> 
    <svg width="100" height="100"> 
    <defs> 
    <marker id="arrow-1" markerWidth="4" markerHeight="3" markerUnits="strokeWidth" refx="1" refy="5" viewBox="0 0 10 10" orient="auto"> 
     <path d="M 0 0 L 10 5 L 0 10 z" fill="context-stroke"></path> 
    </marker> 
    </defs> 
    <path d="M 0,10 L 90,10" stroke-width="2" stroke="red" marker-end="url(#arrow-1)"></path> 
    </svg> 
    </div> 

</body> 
</html> 

: Working arrow

Bildirimi o çalışma çıktı, markör uç doğru vuruş ile aynı hizaya

sonra JavaScript aynı SVG yapısının üretilmesi için bağlantılar:

var arrowID = 0; 
    function drawArrow() { 
    var ns = 'http://www.w3.org/2000/svg'; 
    var svg = document.createElementNS(ns, 'svg'); 
    svg.setAttribute("width",100); 
    svg.setAttribute("height",100); 

    var defs = document.createElementNS(ns, "defs"); 
    var marker = document.createElementNS(ns, "marker"); 
    var id = "arrow-" + arrowID++; 
    marker.setAttribute("id", id); 
    marker.setAttribute("markerWidth", 4); 
    marker.setAttribute("markerHeight", 3); 
    marker.setAttribute("markerUnits", "strokeWidth"); 
    marker.setAttribute("refx", 1); 
    marker.setAttribute("refy", 5); 
    marker.setAttribute("viewBox", "0 0 10 10"); 
    marker.setAttribute("orient", "auto"); 

    var path = document.createElementNS(ns, "path"); 
    path.setAttribute("d","M 0 0 L 10 5 L 0 10 z"); 
    path.setAttribute("fill","context-stroke"); 

    marker.appendChild(path); 
    defs.appendChild(marker); 
    svg.appendChild(defs); 

    var instance = document.createElementNS(ns, "path"); 
    // todo set actual start and end 
    instance.setAttribute("d", "M 0,10 L 90,10"); 
    instance.setAttribute("stroke-width", "2"); 
    instance.setAttribute("stroke", "red"); 
    instance.setAttribute("marker-end", "url(#"+id+")"); 

    svg.appendChild(instance); 

    document.getElementById("stage").appendChild(svg); 


    } 

sayfada biter SVG (yukarıda olana özdeş) doğru olsa bile:

screenshot of chrome dev tools html structure

hale SVG yanlıştır, şöyle görünür: Not aligned arrow

Hatalı çıktıda, marker ucunun strok ile düzgün hizalanmadığına dikkat edin.

Sabit kodlanmış HTML oluşturmada mevcut olan JavaScript kodunda eksik olan nedir? JavaScript neden yanlış hizalanmış bir işaretçi sonu oluşturur? fiddle

+0

@ freestock.tk Bağladığınız keman işe yaramıyor. Gördüğünüz, işaretlemedeki svg. – Archer

cevap

3

SVG harfe duyarlıdır:

İşte Turp içinde her şey. Doğru özellik isimleri refX ve refY'dir.

+0

Ben tam anlamıyla bir iki ya da iki tane göndermeden önce fark ettim: D – Archer

+0

Bu seri hale getirme değil - komut dosyasında. Sadece setAttribute() 'çağrılarının bir yazım hatası. – Archer