2016-08-30 1 views
2

Ich verwende eckig, um dynamische Diagramme zu erstellen. Ich benutze css 'transition', um zu bewirken, dass die Charts steigen. Aber wenn ich die Charts mit einem Wert initialisiere, sind die Charts zwar sehr schön, aber aus irgendeinem Grund wird das Chart mit dem niedrigsten Wert manchmal verschmiert. Ich habe bemerkt, dass das nicht bei jedem Computer passiert. Irgendwelche Ideen warum? Vielleicht hat es etwas mit der Grafikkarte zu tun? oder der Browser? Wenn die Höhe des Rect mit CSS-Übergang geändert wird, wird das niedrigste Rect manchmal verschmiert

Beispiel: http://jsfiddle.net/Lvc0u55v/8846/ re-run es ein paar Mal das Problem zu sehen, tritt

Angular: 
var app = angular.module("myApp", []); 

app.controller("MyCtrl", function ($scope, $timeout) { 
    $scope.charts = [{height:0, x:10, width:80, color:"red"}, 
        {height:0, x:110, width:80, color:"blue" }, 
        {height:0, x:210, width:80, color:"purple"}, 
        {height:0, x:310, width:80, color:"green"}]; 

    $timeout(function(){ 
     for(var i = 0;i<4;i++){ 
     $scope.charts[i].height = 200 + Math.random() * 100; 
     } 
    }, 1); 
}); 

Html: 
<div ng-app="myApp" ng-controller="MyCtrl"> 
    <svg width=400 height=300> 
    <rect ng-repeat="chart in charts" ng-attr-height="{{chart.height}}" ng-attr-width={{chart.width}} ng-attr-x="{{chart.x}}" fill={{chart.color}} stroke=black stroke-width:1px></rect> 
    </svg> 
</div> 

CSS: 
rect{ 
    transition: 0.5s; 
} 
svg{ 
    transform:rotateX(180deg) 
} 
+0

Deaktivieren Sie die Hardwarebeschleunigung und ich denke, es wird weg sein. Dies ist ein Browserabhängiges und Hardware-abhängiges Problem, und soweit ich weiß, gibt es keine wirkliche Lösung dafür. – PierreDuc

+0

@PierreDuc Sie haben Recht. Ich schalte es aus und es hat funktioniert! Aber anscheinend gibt es eine "Lösung" dafür. Siehe die obige Antwort. – Joe

Antwort

2

Sie können dieses Problem beheben, indem outline: 1px solid transparent; zu Ihrem rect CSS hinzufügen.

Demo

Here's the reason why this works

+0

Sehr nett und sehr interessant. Ich sah, dass in der ursprünglichen Antwort die Person, die antwortete, "Anti-Aliasing-Problem" erwähnt. Ehrlich gesagt, konnte ich es nicht verstehen. – Joe

3

Verwenden Sie die 2D statt 3D-Übergang:

svg { 
    transform: rotate(180deg); 
} 

Updated Fiddle.

+0

Wenn du genau hinsiehst, ist die 2D-Implementierung etwas lückenhaft/weniger flüssig (zumindest auf meinem Rechner - Chrome/teure Hardware). Wahrscheinlich wegen der fehlenden Hardwarebeschleunigung. –

+0

Es funktioniert, aber jetzt steigen einige Charts nicht vom selben Startpunkt aus. und es ist Laggy als @Mx. wies darauf hin. – Joe

+0

Versuchen Sie 'will-change: transform;' ... hinzuzufügen, die Animation ist in Firefox nicht sichtbar, Sie müssen mehr Zeit für die Anpassung aufwenden. – skobaljic

Verwandte Themen