Placer les éléments DIV dans la fenêtre SVG
P粉803444331
P粉803444331 2023-09-07 17:48:48
0
1
507

Comment positionner les éléments HTML DIV par rapport aux éléments SVG ?

J'ai utilisé D3 pour générer le graphique SVG :

Je souhaite ajouter une liste déroulante à côté de la légende dans le coin inférieur droit. J'ai l'élément correspondant (un élément HTML DIV classique), mais je ne sais pas comment le positionner correctement sur le graphique.

Je comprends le positionnement des éléments SVG, mais je ne sais pas comment appliquer quelque chose comme un élément DIV.

Des idées autres que de le placer en dehors de la fenêtre (comme ci-dessous) ?

P粉803444331
P粉803444331

répondre à tous(1)
P粉529581199

Afficher Position CSS. Vous pouvez créer un DIV relativement positionné pour contenir votre SVG. Vous pouvez ensuite placer un DIV absolument positionné dessus pour s'adapter au style select 元素;您可以使用它的 lefttop et placer le deuxième DIV où vous le souhaitez.

Tout est réuni :

let w = 500;
let h = 300;
let pad = 10;
let xmin = -2 * Math.PI;
let xmax = 2 * Math.PI;
let ymin = -1.1;
let ymax = 1.1;

let svg = d3.select("#graph")
    .append("svg")
    .attr("max-width", `${w}px`)
    .attr("viewBox", [0, 0, w, h]);
    
let x_scale = d3
  .scaleLinear()
  .domain([xmin, xmax])
  .range([pad, w - pad]);
let y_scale = d3
  .scaleLinear()
  .domain([ymin, ymax])
  .range([h - pad, pad]);
let path = d3
  .line()
  .x((d) => x_scale(d[0]))
  .y((d) => y_scale(d[1]));

svg
  .append("g")
  .attr("transform", `translate(0, ${y_scale(0)})`)
  .call(d3.axisBottom(x_scale).tickFormat(d3.format("d")).tickSizeOuter(0));
svg
  .append("g")
  .attr("transform", `translate(${x_scale(0)})`)
  .call(d3.axisLeft(y_scale).ticks(5).tickSizeOuter(0));
  
d3.select('#function')
  .on('change', function() {
    draw_graph(this.value)
  })
  
  
draw_graph('sine')
  

function draw_graph(f_string) {
  svg.select('path.graph').remove()
  let f
  if(f_string == "sine") {
    f = Math.sin;
  }
  else {
    f = Math.cos;
  }
  let pts = d3.range(xmin, xmax, 0.01)
    .map((x) => [x, f(x)]);
  svg
    .append("path")
    .attr('class', 'graph')
    .attr("d", path(pts))
    .attr("fill", "none")
    .attr("stroke", "black")
    .attr("stroke-width", 3);
}
<script src="https://d3js.org/d3.v7.min.js"></script>

<div style="position: relative" id="viz">
  <svg id="graph" width=500 height=300 style="border: solid 2px black"></svg>
  <div style="border: solid 0.5px black; background-color: rgba(255,255,255,0.7); position: absolute; left: 20px; top: 30px">
    <label for="function">function:</label>
    <select name="function" id="function">
      <option value="sine">sine</option>
      <option value="cosine">cosine</option>
    </select>
   </div>
</div>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!