第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何更新 d3 中綁定數(shù)據(jù)的索引 (i)?

如何更新 d3 中綁定數(shù)據(jù)的索引 (i)?

楊魅力 2023-07-14 15:44:27
在第一次輸入時(shí),我將數(shù)據(jù)綁定到 svg,如下所示:var dateContainer = svg.selectAll("g.dateContainerClass")    .data(dateData, function(d) {       return d.id    });var dateContainerEnter = dateContainer.enter()    .append("g")    .attr("class", "dateContainerClass");此時(shí),綁定數(shù)據(jù)由一個(gè)包含 5 個(gè)條目的數(shù)組組成。從第一個(gè)到最后一個(gè)也是i0 到 4?,F(xiàn)在數(shù)組已更新:兩個(gè)新條目拼接在 0 和 1 之間。dateData.splice((i + 1), 0, rawData[(rawIndex + 1)], rawData[(rawIndex + 2)])之后,新的dateData將再次綁定到選擇,如上所示。我期待發(fā)生的是這樣的:i=0 (old)i=1 (new)i=2 (new)i=3 (old)i=4 (old)etc.實(shí)際發(fā)生的情況是這樣的:i=0 (old)i=1 (new)i=2 (new)i=1 (old)i=2 (old)etc.我做錯(cuò)了什么還是這是預(yù)期的行為?任何幫助將非常感激!
查看完整描述

1 回答

?
繁花如伊

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊

當(dāng)您設(shè)置.attr("id"一個(gè)函數(shù)時(shí),該函數(shù)會(huì)立即執(zhí)行,并且僅執(zhí)行一次。這意味著當(dāng)您將新值插入數(shù)據(jù)數(shù)組時(shí),您還需要重新計(jì)算該屬性。如果您移動(dòng).attr("id"到之后.merge,一切都會(huì)按預(yù)期進(jìn)行:


var windowWidth = window.innerWidth;

var storyline = d3.select(".Storyline").append("svg");


function update(dateData, rawData) {

  console.log(dateData)

  var x = d3.scaleLinear()

    .domain([0, (dateData.length - 1)])

    .range(["10%", "80%"]);


  storyline

    .transition()

    .duration(500)

    .delay(50)

    .attr("width", (dateData.length * 20) + "%")

    .attr("height", "100%")


  var dateFlags = storyline.selectAll("g.dateflag")

    .data(dateData, function(d, i) {

      return d

    });


  //ENTER


  var dateFlagsEnter = dateFlags.enter()

    .append("g")

    .attr("class", "dateflag");


  dateFlagsEnter.append("foreignObject")

    .attr("class", "timePoints")

    .attr("width", "130px")

    .attr("height", "100%")

    .attr("x", function(d, i) {

      return x(i);

    })

    .attr("y", function(d, i) {

      var topBottom;

      if ((i % 2) == 1) {

        topBottom = "35%";

      } else {

        topBottom = "40%";

      }

      return topBottom;

    })

    .attr("opacity", "0%");


  dateFlagsEnter.select(".timePoints").append("xhtml:div")

    .attr("class", "tpGroup")


  dateFlagsEnter.select(".tpGroup").append("xhtml:div")

    .attr("id", "dateLabel")

    .append("xhtml:div")

    .html(function(d, i) {

      return d + " index= " + i;

    })

    .attr("id", "dateLabelText")

    .on("click", function(d, i) {

      var clickIndex = i

      console.log("clickedID: " + clickIndex)

      expand(dateData, clickIndex);

    });


  //UPDATE


  dateFlags.merge(dateFlagsEnter)

    .attr("id", function(d, i) {

      console.log("ContainerID: " + i)

      return i

    })

    .select(".timePoints")

    .transition()

    .duration(500)

    .delay(50)

    .attr("x", function(d, i) {

      return x(i);

    })

    .attr("opacity", "100%");


  dateFlags.merge(dateFlagsEnter).select("#dateLabelText")

    .html(function(d) {

      return d;

    });


  //EXIT


  dateFlags.exit().remove();


};


function expand(dateData, clickIndex) {

  var lineIndex = clickIndex


  dateData.splice((lineIndex + 1), 0, "Day1.1", "Day1.2")

  update(dateData);

};


function getDateData() {

  var dateData = ["Day1", "Day2", "Day3", "Day4", "Day5", ]

  update(dateData);

};


getDateData();

<div class="Storyline"></div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>


查看完整回答
反對(duì) 回復(fù) 2023-07-14
  • 1 回答
  • 0 關(guān)注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)