


Gunakan d3.js untuk melaksanakan hubungan menu drop-down untuk mengemas kini carta
Dokumen ini bertujuan untuk membimbing pemaju tentang cara menggunakan D3.js dalam kombinasi dengan mod `Join`,` Enter`, `Update`,` Exit` untuk melaksanakan visualisasi interaktif yang memilih data melalui menu drop-down HTML dan carta kemas kini dinamik. Titik utama adalah untuk mendengar peristiwa `perubahan` menu lungsur dan lulus nilai yang dipilih ke fungsi yang mengemas kini carta, dengan itu mencapai refresh dinamik carta.
Langkah pelaksanaan
1. Penyediaan data
Pertama, anda perlu menyediakan data untuk menjana carta. Kod berikut menghasilkan data sumber SRC yang mengandungi tahun, nama, pangkat dan nilai. Data ini akan digunakan untuk carta dan pengemaskinian berikutnya.
// panjang permutasi yang dikehendaki panjang const = 4; // Membina array dari panjang di atas const perm = array.from (array (panjang) .keys ()). MAP ((d) => d 1); // Menjana huruf yang sepadan untuk nama const name = perm.Map ((x) => String.FromCharCode (x - 1 65)); // fungsi permutasi-https://stackoverflow.com/questions/9960908/permutations-in-javascript/24622772#24622772 fungsi permute (permutasi) { var panjang = permutation.length, hasil = [permutation.slice ()], c = array baru (panjang) .fill (0), i = 1, k, p; sementara (i <panjang jika k="i" c p="permutasi" permutasi i="1;" result.push else hasil pulangan menjana const permut="permute" tahun berdasarkan year="permut.map"> i 2000); // Menjana pemalar tahunan berdasarkan tahun untuk menjana nilai akhir mengikut pangkat {name tahun} const constant = year.map (d => math.round (d * math.random ()))); const src = tahun.map ((y, i) => { kembali name.map ((d, j) => { kembali { Nama: D, Tahun: y, Kedudukan: Permut [i] [J], Const: tetap [i], Nilai: math.round (malar [i] / permut [i] [j]) }; }); }). rata ();</panjang>
2. Buat Menu Drop-Down HTML
Gunakan D3.js untuk membuat menu drop-down HTML dan mengisi pilihan dengan data tahun. Kuncinya adalah untuk menambah pendengar acara perubahan ke menu dropdown untuk mencetuskan kemas kini carta apabila pengguna memilih tahun yang berbeza.
const pilih = d3.select ('badan') .append ('div', 'dropdown') .style ('kedudukan', 'mutlak') .Style ('atas', '400px') .append ('pilih') .attr ('nama', 'input') .classed ('tahun', benar); pilih.selectall ('pilihan') .data (tahun) .Enter () .append ('pilihan') .Text ((d) => d) .attr ("nilai", (d) => d) pilih.on ("perubahan", event => { const filteryr = event.currentTarget.Value; lukis (penapis); });
NOTIS:
- pilih.on ("perubahan", ...) digunakan untuk mendengar peristiwa perubahan menu lungsur.
- Event.CurrentTarget.Value mendapat nilai tahun yang dipilih sekarang.
- Lukis (penapis) memanggil fungsi lukisan carta, lulus tahun yang dipilih sebagai parameter.
3. Buat kanvas SVG
Buat elemen SVG untuk lukisan carta. Tetapkan harta Viewbox SVG untuk menjadikannya responsif.
// ruang nama // Tentukan dimensi const width = 1536; const height = 720; const svgns = "http://www.w3.org/2000/svg"; const svg = d3.select ("svg"); svg.attr ("xmlns", svgns) .attr ("viewBox", `0 0 $ {width} $ {height}`); SVG .append ("rect") .attr ("kelas", "vboxRect") .attr ("lebar", `$ {width}`) .attr ("ketinggian", `$ {ketinggian}`) .attr ("strok", "hitam") .attr ("mengisi", "putih"); // Buat elemen terikat const bound = svg .append ("g") .attr ("kelas", "terikat") .Style ("Transform", `Translate ($ {Padding.Left} px, $ {padding.top} px)`); const g = terikat.append ('g') .classed ('TextContainer', benar);
4. Tentukan skala
Tentukan skala dan peta data ke koordinat SVG. Pilih jenis skala yang sesuai (seperti skala linear, skala masa, dan lain -lain) mengikut keperluan sebenar.
const xaccessor = (d) => d.year; const yaccessor = (d) => d.value; const scalex = d3 .scalelinear () .range ([0, BoundWidth]) .domain (d3.extent (data, xaccessor)); const scaley = d3 .scalelinear () .range ([boundheight, 0]) .domain (d3.extent (data, yaccessor));
5. Lukis carta dan laksanakan kemas kini dinamik
Gunakan mod Join, Enter, Update, dan Exit D3.js untuk menarik carta berdasarkan data tahun yang dipilih. Dalam fungsi Draw (), penapis pertama data dan kemudian mengemas kini elemen carta menggunakan selectAll (). Data (). Sertai () kaedah.
Fungsi Draw (FilteryR) { // Penapis data mengikut dropdown const data = src.filter (a => a.year == filteryr); const scalex = d3 .scalelinear () .range ([0, BoundWidth]) .domain (d3.extent (data, xaccessor)); const scaley = d3 .scalelinear () .range ([boundheight, 0]) .domain (d3.extent (data, yaccessor)); G.Selectall ('Teks') .data (data) .join ( enter => enter.append ('teks') .attr ('x', (d, i) => scalex (d.year)) .attr ('y', (d, i) => i) .attr ('dy', (d, i) => i * 30) .Text ((d) => d.year '-------' d.value.toloCaleString ()) .style ("isi", "biru"), UPDATE => Kemas kini .transition () .duration (500) .attr ('x', (d, i) => scalex (d.year)) .attr ('y', (d, i) => i) .attr ('dy', (d, i) => i * 30) .Text ((d) => d.year '-------' d.value.toloCaleString ()) .style ("isi", "merah") ) } lukis (penapis);
Mata Utama:
- Data (data) mengikat data yang ditapis ke elemen teks.
- Sertai (masukkan, kemas kini, keluar) mengendalikan status entri, kemas kini, dan keluar data.
- Masukkan Pilih untuk menambah elemen teks baru.
- Kemas kini Memilih untuk mengemas kini elemen teks yang ada.
- Keluar memilih untuk mengeluarkan elemen teks yang tidak lagi diperlukan.
Contoh kod lengkap
<meta charset="utf-8"> <meta http-equiv="x-ua-comple content" content="ie = edge"> <meta name="viewport" content="width = peranti-lebar, skala awal = 1.0"> <tirtment> d3.js dropdown update <script src="https://d3js.org/d3.v7.min.js"> </script> <svg width="960" ketinggian="500"> </svg> <script> //////////////////////////////////////////////////////////////// ///////////////////////// 00 BUILD DATA//////// ///////////// //////////////////////////////////////////////////////////////// // panjang permutasi yang dikehendaki panjang const = 4; // Membina array dari panjang di atas const perm = array.from (array (panjang) .keys ()). MAP ((d) => d 1); // Menjana huruf yang sepadan untuk nama const name = perm.Map ((x) => String.FromCharCode (x - 1 65)); // fungsi permutasi-https://stackoverflow.com/questions/9960908/permutations-in-javascript/24622772#24622772 fungsi permute (permutasi) { var panjang = permutation.length, hasil = [permutation.slice ()], c = array baru (panjang) .fill (0), i = 1, k, p; sementara (i <panjang) { jika (c [i] <i) { k = i % 2 && c [i]; p = permutasi [i]; permutasi [i] = permutasi [k]; permutasi [k] = p; c [i]; i = 1; result.push (permutation.slice ()); } else { c [i] = 0; i; } } hasil pulangan; }; // Menjana permutasi const permut = permute (perm); // menjana tahun berdasarkan permutasi const year = permut.map ((x, i) => i 2000); // Menjana pemalar tahunan berdasarkan tahun untuk menjana nilai akhir mengikut pangkat {name tahun} const constant = year.map (d => math.round (d * math.random ()))); const src = tahun.map ((y, i) => { kembali name.map ((d, j) => { kembali { Nama: D, Tahun: y, Kedudukan: Permut [i] [J], Const: tetap [i], Nilai: math.round (malar [i] / permut [i] [j]) }; }); }). rata (); //////////////////////////////////////////////////////////////// ////////////////////////// 0 BUILD HTML DROPDOWN ////////////// //////////////////////////////////////////////////////////////// const pilih = d3.select ('badan') .append ('div', 'dropdown') .style ('kedudukan', 'mutlak') .Style ('atas', '400px') .append ('pilih') .attr ('nama', 'input') .classed ('tahun', benar); pilih.selectall ('pilihan') .data (tahun) .Enter () .append ('pilihan') .Text ((d) => d) .attr ("nilai", (d) => d) // Dapatkan nilai dropdown const filteryR = parsefloat (d3.select ('. year'). node (). nilai); pilih.on ("perubahan", event => { const filteryr = event.currentTarget.Value; lukis (penapis); }); //////////////////////////////////////////////////////////////// ////////////////////////// 1 DATA WRANGLING /////////////////// //////////////////////////////////////////////////////////////// const xaccessor = (d) => d.year; const yaccessor = (d) => d.value; //////////////////////////////////////////////////////////////// ///////////////////////// 2 CREATE SVG //////////////////////// //////////////////////////////////////////////////////////////// // ruang nama // Tentukan dimensi const width = 960; const height = 500; const svg = d3.select ("svg"); //////////////////////////////////////////////////////////////// ////////////////////////// 3 CREATE BOUND ///////////////////// //////////////////////////////////////////////////////////////// const padding = { Atas: 70, Bawah: 100, Kiri: 120, Kanan: 120 }; conse multiplierH = 1; // mengawal ketinggian bekas visual conse multiplierw = 1; // Mengawal lebar bekas visual const boundheight = ketinggian * multiplierH - padding.top - padding.bottom; const boundWidth = width * multiplierw - padding.right - padding.left; // Buat elemen terikat const bound = svg .append ("g") .attr ("kelas", "terikat") .Style ("Transform", `Translate ($ {Padding.Left} px, $ {padding.top} px)`); const g = terikat.append ('g') .classed ('TextContainer', benar); Fungsi Draw (FilteryR) { // Penapis data mengikut dropdown const data = src.filter (a => a.year == filteryr); //////////////////////////////////////////////////////////////// ////////////////////////// 4 CREATE SCALE ///////////////////// //////////////////////////////////////////////////////////////// const scalex = d3 .scalelinear () .range ([0, BoundWidth]) .domain (d3.extent (data, xaccessor)); const scaley = d3 .scalelinear () .range ([boundheight, 0]) .domain (d3.extent (data, yaccessor)); G.Selectall ('Teks') .data (data) .join ( enter => enter.append ('teks') .attr ('x', (d, i) => scalex (d.year)) .attr ('y', (d, i) => i) .attr ('dy', (d, i) => i * 30) .Text ((d) => d.year '-------' d.value.toloCaleString ()) .style ("isi", "biru"), UPDATE => Kemas kini .transition () .duration (500) .attr ('x', (d, i) => scalex (d.year)) .attr ('y', (d, i) => i) .attr ('dy', (d, i) => i * 30) .Text ((d) => d.year '-------' d.value.toloCaleString ()) .style ("isi", "merah") ) } lukis (penapis); </script> </tirtment>
Meringkaskan
Melalui langkah-langkah di atas, anda boleh melaksanakan carta berdasarkan D3.js yang boleh dikemas kini secara dinamik mengikut pemilihan menu lungsur. Inti adalah untuk mendengar peristiwa perubahan menu drop-down dan menggunakan mod Join, Enter, Update, dan Exit untuk mengemas kini elemen carta dengan cekap. Dalam aplikasi praktikal, pelaksanaan pemprosesan data, skala, dan jenis carta boleh diselaraskan mengikut keperluan khusus.
Atas ialah kandungan terperinci Gunakan d3.js untuk melaksanakan hubungan menu drop-down untuk mengemas kini carta. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT
Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Tutorial ini memperincikan cara menggunakan CSS untuk menyembunyikan kandungan teks tertentu dengan tepat di halaman HTML untuk mengelakkan masalah seluruh elemen induk yang tersembunyi kerana pemilih yang tidak betul. Dengan menambah kelas CSS eksklusif ke elemen pembalut teks sasaran dan menggunakan paparan: tiada; Atribut, pemaju boleh mencapai kawalan halus elemen halaman, memastikan bahawa hanya bahagian yang diperlukan tersembunyi, dengan itu mengoptimumkan susun atur halaman dan pengalaman pengguna.

Artikel ini meneroka cabaran menangkap peristiwa mousedown pada div ibu bapa yang mengandungi iframes domain. Masalah teras ialah dasar keselamatan pelayar (dasar asal usul) menghalang acara langsung DOM mendengar kandungan iframe silang domain. Jenis penangkapan acara ini tidak dapat dicapai melainkan nama domain sumber iframe dikawal dan CORS dikonfigurasi. Artikel ini akan menerangkan mekanisme keselamatan secara terperinci dan batasan mereka mengenai interaksi peristiwa dan memberikan alternatif yang mungkin.

Apabila menggunakan bootstrap untuk susun atur laman web, pemaju sering menghadapi masalah elemen yang dipaparkan bersebelahan dan bukannya disusun secara vertikal secara lalai, terutamanya apabila bekas induk menggunakan susun atur Flexbox. Artikel ini akan meneroka cabaran susun atur yang sama dengan mendalam dan memberikan penyelesaian: dengan menyesuaikan atribut flex-arah dari bekas flex ke lajur, menggunakan kelas alat Flex-Column Bootstrap untuk mencapai susunan menegak yang betul dari tag H1 dan blok kandungan seperti bentuk, memastikan struktur halaman memenuhi jangkaan.

USECSSSFLOOPROPERTYTOWRAPTEXTAROUNIMAGE: FloatLeftFortExtOntHeright, FloatRightFortExtOnTheLeft, AddMarginforspacing, andClearFloatStOpreventLayOuteSues.

Usemailto: inhreftocreateemailinks.startwithforbasiclinks, tambah? Subjek = dan & body = forpre-filledContent, andincludemultipleaddressorcc =, bcc = foradvancedOptions.

Setthelangattributeinthehtmltagtospecifypagelanguage, mis., Forenglish;

Artikel ini meneroka dua masalah biasa apabila memanggil fungsi JavaScript luaran dalam HTML: masa pemuatan skrip yang tidak betul menyebabkan unsur-unsur DOM menjadi tidak siap, dan penamaan fungsi mungkin bertentangan dengan peristiwa terbina dalam pelayar atau kata kunci. Artikel ini menyediakan penyelesaian terperinci, termasuk lokasi rujukan skrip tweaking dan mengikuti spesifikasi penamaan fungsi yang baik untuk memastikan kod JavaScript dilaksanakan dengan betul.

USetetetitLeatTrBITrBITpetoLToolCUStOM-STyLElyLEtoMSORCUStOM.1.addtitle = "Text" toanyeLementFordefaLtTipips.2.forStyLEdToolTips, wrapTheelememementinAcontainer, uss.toolTipand.tool
