2017-05-14 2 views
0

J'utilise ce didacticiel ESRI Info window with chart.Redimensionner graphique dojox sur l'écran mobile

enter image description here

Et je voudrais personnaliser le graphique circulaire de dojox pour les petits écrans:

@media only screen 
    and (max-device-width: 320px) { 
    ... 
    } 

Est-il possible d'utiliser des tailles de tableau dojox personnalisées pour les tailles d'écran personnalisé?

Par exemple, le diagramme à secteurs doit être {width: 60px; height: 60px} uniquement lors du chargement sur un écran avec max-device-width: 320px?

Répondre

1

Oui, c'est possible.

enter image description here

Cependant, je crains que vous ne pouvez pas y parvenir que par CSS, Parce que la taille du tableau dépend de divers facteurs. comme chart radius, map infoWindow size, container size etc.

Solution- Vous pouvez modifier ci-dessus les valeurs en fonction de la taille de l'écran dynamique, vous pouvez utiliser window resize event pour elle .. voici comment vous pouvez y parvenir.

Ci-dessous le code- travail

<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
 
    
 
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"> 
 
    <title>Info Window with Chart</title> 
 
    <link rel="stylesheet" href="https://js.arcgis.com/3.20/dijit/themes/claro/claro.css"> 
 
    <link rel="stylesheet" href="https://js.arcgis.com/3.20/esri/css/esri.css"> 
 
    <style> 
 
     html, body, #map { 
 
     height: 100%; 
 
     width: 100%; 
 
     margin: 0; 
 
     padding: 0; 
 
     } 
 
     .chart { 
 
     width:100px; 
 
     height:100px; 
 
     padding:0px !important; 
 
     } 
 
    </style> 
 
    <script src="https://js.arcgis.com/3.20/"></script> 
 
    <script> 
 
     var map; 
 
     // Try other themes: Julie, CubanShirts, PrimaryColors, Charged, BlueDusk, Bahamation, Harmony, Shrooms 
 
     var theme = "Wetland"; 
 
     require([ 
 
     "esri/map", "esri/layers/FeatureLayer", 
 
     "esri/dijit/InfoWindow", "esri/InfoTemplate", 
 
     "esri/symbols/SimpleFillSymbol", "esri/renderers/SimpleRenderer", 
 
     "dijit/layout/ContentPane", "dijit/layout/TabContainer", 
 
     "dojox/charting/Chart2D", "dojox/charting/plot2d/Pie", 
 
     "dojox/charting/action2d/Highlight", "dojox/charting/action2d/MoveSlice", "dojox/charting/action2d/Tooltip", 
 
     "dojox/charting/themes/" + theme, 
 
     "dojo/dom-construct", "dojo/dom-class", 
 
     "dojo/number", "dojo/domReady!" 
 
     ], function(
 
     Map, FeatureLayer, 
 
     InfoWindow, InfoTemplate, 
 
     SimpleFillSymbol, SimpleRenderer, 
 
     ContentPane, TabContainer, 
 
     Chart2D, Pie, 
 
     Highlight, MoveSlice, Tooltip, 
 
     dojoxTheme, 
 
     domConstruct, domClass, 
 
     number, parser 
 
    ) { 
 
     // Use the info window instead of the popup. 
 
     var infoWindow = new InfoWindow(null, domConstruct.create("div")); 
 
     infoWindow.startup(); 
 

 
     map = new Map("map", { 
 
      basemap: "streets", 
 
      center: [-113.405, 43.521], 
 
      infoWindow: infoWindow, 
 
      zoom: 6 
 
     }); 
 
     map.infoWindow.resize(180, 200); 
 

 
     var template = new esri.InfoTemplate(); 
 
     // Flag icons are from http://twitter.com/thefella, released under creative commons. 
 
     template.setTitle("<b><img src='flags/${STATE_ABBR}.png'> ${STATE_NAME}</b>"); 
 
     template.setContent(getWindowContent); 
 

 
     var statesLayer = new FeatureLayer("https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/5", { 
 
      mode: FeatureLayer.MODE_ONDEMAND, 
 
      infoTemplate: template, 
 
      outFields: ["*"] 
 
     }); 
 
     var symbol = new SimpleFillSymbol(); 
 
     statesLayer.setRenderer(new SimpleRenderer(symbol)); 
 

 
     map.addLayer(statesLayer); 
 

 
     function getWindowContent(graphic) { 
 
      // Make a tab container. 
 
      var tc = new TabContainer({ 
 
      style: "width:100%;height:100%;" 
 
      }, domConstruct.create("div")); 
 

 
      // Display attribute information. 
 
      var cp1 = new ContentPane({ 
 
      title: "Details", 
 
      content: "<a target='_blank' href='https://en.wikipedia.org/wiki/" + 
 
       graphic.attributes.STATE_NAME + "'>Wikipedia Entry</a><br><br>Median Age: " + 
 
       graphic.attributes.MED_AGE + "<br>Median Age (Male): " + 
 
       graphic.attributes.MED_AGE_M + "<br>Median Age (Female): " + 
 
       graphic.attributes.MED_AGE_F 
 
      }); 
 
      // Display a dojo pie chart for the male/female percentage. 
 
      var cp2 = new ContentPane({ 
 
      title: "Pie Chart" 
 
      }); 
 
      tc.addChild(cp1); 
 
      tc.addChild(cp2); 
 

 
      // Create the chart that will display in the second tab. 
 
      var c = domConstruct.create("div", { 
 
      id: "demoChart" 
 
      }, domConstruct.create("div")); 
 
      var chart = new Chart2D(c); 
 
      domClass.add(chart, "chart"); 
 

 
      // Apply a color theme to the chart. 
 
      chart.setTheme(dojoxTheme); 
 
      chart.addPlot("default", { 
 
      type: "Pie", 
 
      radius: 45, 
 
      htmlLabels: true 
 
      }); 
 
      tc.watch("selectedChildWidget", function(name, oldVal, newVal){ 
 
      if (newVal.title === "Pie Chart") { 
 
       chart.resize(100,100); 
 
      } 
 
      }); 
 

 
      // Calculate percent male/female. 
 
      var total = graphic.attributes.POP2000; 
 
      var male = number.round(graphic.attributes.MALES/total * 100, 2); 
 
      var female = number.round(graphic.attributes.FEMALES/total * 100, 2); 
 
      chart.addSeries("PopulationSplit", [{ 
 
      y: male, 
 
      tooltip: male, 
 
      text: "Male" 
 
      }, { 
 
      y: female, 
 
      tooltip: female, 
 
      text: "Female" 
 
      }]); 
 
      //highlight the chart and display tooltips when you mouse over a slice. 
 
      new Highlight(chart, "default"); 
 
      new Tooltip(chart, "default"); 
 
      new MoveSlice(chart, "default"); 
 

 
      cp2.set("content", chart.node); 
 
      return tc.domNode; 
 
     } 
 
     }); 
 
    </script> 
 
    </head> 
 

 
    <body class="claro"> 
 
    <div id="map"></div> 
 
    </body> 
 
</html>

En espérant que cela vous aidera :)

+0

Salut @Developerrrr Merci! La modification des valeurs dans le script cible tous les écrans qui chargent l'application Web. Donc, fondamentalement, vous ne pouvez pas personnaliser les graphiques dojox uniquement pour les petits écrans mobiles et conserver leur taille initiale pour les écrans plus grands. Juste essayer de comprendre comment cela fonctionne ... est-ce que mon évaluation est correcte? – Michelle

+1

votre point est correct. Je suggère de changer ces valeurs en fonction de la taille de l'écran. Utilisez du code JavaScript pour cela au lieu de CSS. https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_onresize --- cet exemple montre comment vous pouvez vérifier la largeur/hauteur de l'appareil ou du navigateur ... donc, fondamentalement, vous devez ajouter un "onresize" "sur votre code et appelez une fonction que la faction va changer ces valeurs en fonction de la taille de l'écran ... –

+1

Ce n'est pas simple à mettre en œuvre, je vous suggère simplement comment vous pouvez y parvenir .. une autre façon de le faire ... Si c'est si important dans votre projet, vous pouvez utiliser cette alternative ... –