2013-10-16 3 views
7

Ich versuche, ein Diagramm zu erhalten, das wie ein Messgerät aussieht.Gauge-Diagramm in Javascript oder jQuery Flot

Ich verwende bereits jQuery Flot für meine anderen Diagramme, also ist es möglich, Flot oder Javascript zu verwenden? Kann mir jemand helfen, damit anzufangen, das zu programmieren?

+3

Editierte Frage sieht gut aus. Die angebotene Lösung ist brillant und äußerst wertvoll. Bitte erwägen Sie, die Entscheidung zum Schließen dieser Frage rückgängig zu machen. –

Antwort

3

Dies ist vergleichbar mit Visualize energy efficiency level, außer dass es keine Möglichkeit gibt, dies mit den Basisoptionen von Flot zu tun.

Wie in meiner Antwort auf diese Frage vorgeschlagen, müssen Sie ein Plugin erstellen, das drawBackground, drawSeries überschreibt und möglicherweise zeichnet.

+0

Ich denke, wenn es einfach ist, ohne Flot zu tun. Was denken Sie? – user2818666

+4

@DNS, nehme ich das als Herausforderung, ich bin davon überzeugt, dass Basisoptionen flot alles tun können :) – Mark

+0

@DNS sieht sehr komplex aus, aber ich versuche, danke – user2818666

10

Hier wird nur mit Basis flot und ein Hintergrundbild:

// consts 
 
var minCord = {x: -60, y: -57}; 
 
var maxCord = {x: 60, y: -60}; 
 
var radius = 90; 
 

 
$(function() { 
 
    
 
    // some calculations 
 
    var startAngle = (6.2831 + Math.atan2(minCord.y, minCord.x)); 
 
    var endAngle = Math.atan2(maxCord.y, maxCord.x); 
 
    var degreesSweep = (-endAngle) + startAngle; 
 
     
 
    var positionOnArc = function(magnitude){ 
 
     var numDegrees = degreesSweep * (magnitude/100.0); 
 
     var angle = (startAngle - numDegrees); 
 
     var posX = radius * Math.cos(angle); 
 
     var posY = radius * Math.sin(angle); 
 
     return [posX, posY]; 
 
    } 
 
     
 
    var options = { 
 
     xaxis: { 
 
      min: -100, 
 
      max: 100, 
 
      show: false 
 
     }, 
 
     yaxis: { 
 
      min: -100, 
 
      max: 100, 
 
      show: false 
 
     }, 
 
     grid: { 
 
      show: false 
 
     } 
 
    }; 
 

 
    updatePlot = function(){   
 
     var data = [[0,0],positionOnArc(Math.random() * 100)]; 
 
     $('#placeholder').plot([data], options); 
 
     setTimeout(updatePlot, 1000); 
 
    } 
 
    
 
    updatePlot(); 
 
});
#placeholder 
 
{ 
 
    background-image:url('http://www.clker.com/cliparts/6/Z/q/9/9/D/gauge-md.png'); 
 
    width: 300px; 
 
    height: 300px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/flot/0.8.1/jquery.flot.min.js"></script> 
 
<div id="placeholder"></div>

Fiddle here.

enter image description here

+0

Du bist großartig, ich versuche es, aber ich kam nicht annähernd dazu. Ich möchte wissen, ob ich die Bilder, die ich in Frage gestellt habe, für Hintergrund und Nadel, besonders Nadel, verwenden kann. Danke. – user2818666

+0

@ user2818666, die Nadel ist eine 'series' Linie. Es würde nicht schwierig sein, das Erscheinungsbild zu replizieren. Hast du das obige Bild ohne die Nadel drin? – Mark

+0

Danke, ich bereite das vor. Ich werde die Frage in ein paar Minuten aktualisieren. Das möchte ich tun. Der Zeiger sollte auf einen Winkel zeigen, der auf dem Wert in Daten basiert. Wenn möglich, bevor Sie auf den Wert zeigen, kann sich die Nadel nur so drehen, dass sie aussieht wie gemessen wird und dann an einem Punkt bleibt. Danke – user2818666