2017-12-20 10 views
0

Ich habe Schwierigkeiten, einen Bogen wie ein Fortschrittsbalken zu füllen, weil ich nicht so gut mit CSS arbeiten.Erstellen und Füllen von Bogen progressiv mit CSS - Kreis Fortschrittsbalken

Ich will einen „Fortschritt“ arc wie folgt erreichen: enter image description here

ich mit diesem über kam: https://codepen.io/enslavedeagle/pen/AXzaKE

#arc, 
#arc::before { 
    display: block; 
    box-sizing: border-box; 
    border-radius: 100%; 
    width: 100px; 
    height: 100px; 
    position: absolute; 
    background-color: transparent; 
    padding: 0; 
    margin: 0; 
} 

#arc { 
    border: solid #00BBEE 12px; 
    clip: rect(0px, 100px, 50px, 0px); 
    margin: 25px; 
} 

#arc::before { 
    content: ''; 
    border: solid black 12px; 
    top: -12px; 
    left: -12px; 
    clip: rect(0px, 100px, 50px, 0px); 
    transform: rotate(-150deg); 
    /* define the fill length, using the rotation above. 
    from -180deg (0% fill) to 0deg (100% fill) */ 
    /* if you have a better solution to make thing like this 
    work, please let me know! :) */ 
} 

und versuchen, wie sein zu gestalten, was ich will, aber ohne Erfolg bis jetzt: hier: https://codepen.io/anon/pen/qpNrEP

Könnte jemand Hilfe dabei geben? Kann auch eine alternative Lösung sein, um dies zu erreichen.

Ich schätze

Mit freundlichen Grüßen

+0

können Sie jquery oder nur CSS verwenden? –

+0

Ich kann Winkel 4 –

Antwort

1

Sie können ein SVG mit zwei Bogen auf oben auf dem anderen verwenden und dann stroke-dash-array verwenden.

svg { 
 
    height: 90vh; 
 
    margin: auto; 
 
    display: block; 
 
} 
 

 
path { 
 
    stroke-linecap: round; 
 
    stroke-width: 2; 
 
} 
 

 
path.grey { 
 
    stroke: lightgrey; 
 
} 
 

 
path.purple { 
 
    stroke: purple; 
 
    stroke-dasharray: calc(40 * 3.142 * 1.85); 
 
    stroke-dashoffset: 20; 
 
    /* adjust last number for variance */ 
 
}
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewbox="0 0 100 100"> 
 
    <path class="grey" d="M40,90 
 
      A40,40 0 1,1 60,90" 
 
      style="fill:none;"/> 
 
    <path class="purple" d="M40,90 
 
      A40,40 0 1,1 60,90" 
 
      style="fill:none;"/> 
 
</svg>

+0

Das ist, was ich gesucht habe ... jetzt muss ich nur den Wert von "stroke-dashoffset" auf 0-100% abbilden, damit der Fortschritt funktioniert. Ich möchte tausendmal aufbessern! Ich danke dir sehr! Stört es Sie zu erklären, wie die Berechnung von 'stroke-dasharray' (calc (40 * 3.142 * 1.85)) funktioniert? –

+0

Es ist ein wenig komplizierter, dass es klingt, da Sie wahrscheinlich JS benötigen, um den tatsächlichen Strich-Array und Strich-Offset zu bestimmen. Die Berechnung ist * grob * (Radius * Pi * beliebiger Bereich). Es bricht jedoch, wenn Sie damit fertig sind. Wie ich sagte, werden diese normalerweise von JS verwaltet. Dies ist nur um das Konzept zu demonstrieren. –

+0

Ich werde angular verwenden, um zu verwalten, kein Problem. Ich will nur wissen, wie man den Bogen zeichnet und füllt ("stroke-dasharray"). Ich fragte, weil ich nicht gewohnt bin, mit geometrischen Formen zu arbeiten ... also verstehe ich nicht, wie du zu diesem Ergebnis gekommen bist, wie: warum 1.85? auf der Calc-Form?Wenn möglich, könnten wir im Chat reden? Danke nochmal –

0

Hier ist ein Winkelmodul, das SVG eine kreisförmige progressbar erstellen verwendet. Sieht nach genau dem aus, wonach du suchst.

Repo: https://github.com/crisbeto/angular-svg-round-progressbar

Demo: http://crisbeto.github.io/angular-svg-round-progressbar/

+0

Dank verwenden, aber es ist nicht das, was ich eigentlich will. Sieh dir das Bild an, das ich gepostet habe: Es gibt eine Lücke auf dem Kreis und es beginnt auch von unten. Wenn sich die Layoutanforderungen ändern, könnte dies eine gute Option sein. –

0

Ich habe gerade eine plnker in Angular 2, die ich, es ist genau das denken, was Sie wollen.

es einrichten die Füllung des zweiten Bogens mit einer variablen:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewbox="0 0 100 100"> 
    <path class="grey" d="M40,90 A40,40 0 1,1 60,90" style="fill:none;"/> 
    <path [ngStyle]="{'stroke-dashoffset':percentPath}" class="blue" d="M40,90 A40,40 0 1,1 60,90" style="fill:none;"/> 
</svg> 

Dann wird in der Komponente nenne ich eine Funktion, die den Wert von einem Schieber nehmen mit min = 0 und max = 100:

this.percentPath=(233-(V*2.33)); //233 is the maximun number stroke-dashoffset needs to disapear the second path 

https://plnkr.co/edit/KNPThi?p=info

es werfen sie einen Blick!

+0

danke aber von der Antwort habe ich eine Komponente erstellt, die dynamisch verwendet werden kann. Sie können überprüfen: https://elmeerr.github.io/ng2-arc-progress-demo/ –

+0

Cool !! Es ist wunderbar. Ich wollte die Komponente machen, aber das hast du schon gemacht. Vielen Dank! –

+0

@ElmerDantas Haben Sie schon einmal versucht, den Bogen von 0 auf den entsprechenden Wert zu animieren, wenn die Seite fertig geladen ist? Jetzt habe ich dieses Problem –

Verwandte Themen