Does anyone know where I can find a cloud generator labeled javascript?

Ideally, I'm looking for something that I can provide JSON data retrieved using jquery, and it will generate a cloud based on the data in this request (name, link, size, color, etc.).

+4
source share
2 answers

Quote “Show your skillset with the interactive colorful D3.js tag cloud” , here is a working example of how to create such a cloud. It is based on the Jason Davis cloud computing layout script (in turn inspired by Wordle ), which is used to manage D3.js for drawing a cloud.

enter image description here

You can see the working sample built in below as well as in jsfiddle .

The entire example can be found on GitHub at: https://github.com/bbottema/d3-tag-skills-cloud


First, define the cloud data using the text and size properties:

 var skillsToDraw = [ { text: 'javascript', size: 80 }, { text: 'D3.js', size: 30 }, { text: 'coffeescript', size: 50 }, { text: 'shaving sheep', size: 50 }, { text: 'AngularJS', size: 60 }, { text: 'Ruby', size: 60 }, { text: 'ECMAScript', size: 30 }, { text: 'Actionscript', size: 20 }, { text: 'Linux', size: 40 }, { text: 'C++', size: 40 }, { text: 'C#', size: 50 }, { text: 'JAVA', size: 76 } ]; 

Next, you need to use a script layout to calculate the placement, rotation and size of each word:

 d3.layout.cloud() .size([width, height]) .words(skillsToDraw) .rotate(function() { return ~~(Math.random() * 2) * 90; }) .font("Impact") .fontSize(function(d) { return d.size; }) .on("end", drawSkillCloud) .start(); 

Finally, we implement drawSkillCloud , which executes the D3 drawing:

 // apply D3.js drawing API function drawSkillCloud(words) { d3.select("#cloud").append("svg") .attr("width", width) .attr("height", height) .append("g") .attr("transform", "translate(" + ~~(width / 2) + "," + ~~(height / 2) + ")") .selectAll("text") .data(words) .enter().append("text") .style("font-size", function(d) { return d.size + "px"; }) .style("-webkit-touch-callout", "none") .style("-webkit-user-select", "none") .style("-khtml-user-select", "none") .style("-moz-user-select", "none") .style("-ms-user-select", "none") .style("user-select", "none") .style("cursor", "default") .style("font-family", "Impact") .style("fill", function(d, i) { return fill(i); }) .attr("text-anchor", "middle") .attr("transform", function(d) { return "translate(" + [dx, dy] + ")rotate(" + d.rotate + ")"; }) .text(function(d) { return d.text; }); } 

This is the main thing. You can influence the size and which angles are used to select random spins, as well as some additions between the words, if you want, and the fill color, but these are the basics!

Look at the work in the snippet (or jsfiddle ):

 // First define your cloud data, using `text` and `size` properties: var skillsToDraw = [ { text: 'javascript', size: 40 }, { text: 'D3.js', size: 15 }, { text: 'coffeescript', size: 25 }, { text: 'shaving sheep', size: 25 }, { text: 'AngularJS', size: 30 }, { text: 'Ruby', size: 30 }, { text: 'ECMAScript', size: 15 }, { text: 'Actionscript', size: 10 }, { text: 'Linux', size: 20 }, { text: 'C++', size: 20 }, { text: 'C#', size: 25 }, { text: 'JAVA', size: 38 }, // just copy data and reduce size, else the cloud is a little boring { text: 'javascript', size: 40 }, { text: 'D3.js', size: 15 }, { text: 'coffeescript', size: 25 }, { text: 'shaving sheep', size: 25 }, { text: 'AngularJS', size: 30 }, { text: 'Ruby', size: 30 }, { text: 'ECMAScript', size: 15 }, { text: 'Actionscript', size: 10 }, { text: 'Linux', size: 20 }, { text: 'C++', size: 20 }, { text: 'C#', size: 25 }, { text: 'JAVA', size: 38 }, { text: 'javascript', size: 40 }, { text: 'D3.js', size: 15 }, { text: 'coffeescript', size: 25 }, { text: 'shaving sheep', size: 25 }, { text: 'AngularJS', size: 30 }, { text: 'Ruby', size: 30 }, { text: 'ECMAScript', size: 15 }, { text: 'Actionscript', size: 10 }, { text: 'Linux', size: 20 }, { text: 'C++', size: 20 }, { text: 'C#', size: 25 }, { text: 'JAVA', size: 38 } ]; // Next you need to use the layout script to calculate the placement, rotation and size of each word: var width = 500; var height = 500; var fill = d3.scale.category20(); d3.layout.cloud() .size([width, height]) .words(skillsToDraw) .rotate(function() { return ~~(Math.random() * 2) * 90; }) .font("Impact") .fontSize(function(d) { return d.size; }) .on("end", drawSkillCloud) .start(); // Finally implement `drawSkillCloud`, which performs the D3 drawing: // apply D3.js drawing API function drawSkillCloud(words) { d3.select("#cloud").append("svg") .attr("width", width) .attr("height", height) .append("g") .attr("transform", "translate(" + ~~(width / 2) + "," + ~~(height / 2) + ")") .selectAll("text") .data(words) .enter().append("text") .style("font-size", function(d) { return d.size + "px"; }) .style("-webkit-touch-callout", "none") .style("-webkit-user-select", "none") .style("-khtml-user-select", "none") .style("-moz-user-select", "none") .style("-ms-user-select", "none") .style("user-select", "none") .style("cursor", "default") .style("font-family", "Impact") .style("fill", function(d, i) { return fill(i); }) .attr("text-anchor", "middle") .attr("transform", function(d) { return "translate(" + [dx, dy] + ")rotate(" + d.rotate + ")"; }) .text(function(d) { return d.text; }); } // optional: set the viewbox to content bounding box (zooming in on the content, effectively trimming whitespace) var svg = document.getElementsByTagName("svg")[0]; var bbox = svg.getBBox(); var viewBox = [bbox.x, bbox.y, bbox.width, bbox.height].join(" "); svg.setAttribute("viewBox", viewBox); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script> <script src="https://cdn.rawgit.com/jasondavies/d3-cloud/v1.2.1/build/d3.layout.cloud.js"></script> <div id="cloud"></div> 

You can read a more detailed introduction, followed by a more advanced approach to “Show your skillset with an interactive colorful D3.js tag cloud” . Get a sample project at https://github.com/bbottema/d3-tag-skills-cloud .

+1
source

Source: https://habr.com/ru/post/1300174/


All Articles