D3.js implementation of text line-wrapping detailed _javascript skills

Source: Internet
Author: User
Tags word wrap

What is the problem of word-wrapping?

An existing string:

 
 

Li Qingzhao's cut plum, have you read it?

body Add an svg element to the size as follows:

var width =; 
var height =; 
   
var svg = d3.select ("Body") 
  . Append ("SVG") 
  . attr ("width", width) 
  

Then add the text, with the text elements, such code we are very familiar with:

var text = svg.append ("text"). 
  attr ("x"). 
  attr ("Y", m). 
  attr ("Font-size") 
  . attr (" Font-family "," SimSun ") 
  

The results are as follows:

As you can see, although the contents of the text element label have an entire string, because svg the width is only 300, it cannot display such a long string, so the extra part is not visible.

What to do? Nature is to change lines.

Second, add Tspan child elements in text

Text in SVG does not support wrapping automatically and needs to be implemented manually. One way is to use tspan labels.

tspan is written in text and exists as its child element. When you set the Text property, there dy is a property that represents the y relative displacement of the axis, which is usually a value of dy 10px, 1em, which is in the em behavior unit.

In this way, we can text add more than one tspan , each representing a row. Each tspan attribute is given a 1em value (that is, one row). This way, the text will be displayed line by row.

The SVG code is:

<text x= "A" y= "font-size=" font-family= "SimSun" > <tspan x= "dy= 
" "1em" > Night to dream of returning to the hometown </tspan > 
<tspan x= "dy=" 1em "> Xiao Xuan Window </tspan> 
<tspan x=" dy= "1em" > is dressing </tspan> 

Be aware that tspan the X attribute in is necessary to indicate that the next line also x = 30 starts at the beginning.

Three, D3 code how to write

For the first section of the string, first svg add an text element to it, but do not set its contents.

var str = "In the cloud who sent the brocade book, The Wild Goose Word back, the month fills the West building";   
  
var text = svg.append ("text"). 
    attr ("x"). attr ("Y", m). 
    attr ("Font-size", 30) 
    

To use a JavaScript string split to str fragment:

 
 

Use a comma as a separator, divided into paragraphs. The output is an array, and the items in the array are substrings. The value of the STRs is:

 
 

OK, next is the key, text bind the data in the element and add the strs same element as the length tspan . Then, assign a x value to it and the dy property, and then specify the string contents.

The code is as follows:

Text.selectall ("Tspan") 
  . Data (STRs). 
  enter (). 
  Append ("Tspan"). 
  attr ("x", Text.attr ("x") 
  ). attr ("Dy", "1em") 
  . Text (function (d) {return 
   D; 
  

The results are as follows:

To this we are basically completed, the following to give you a complete sample code, there is a need to refer to.

The full instance code is as follows

 
 

Summarize

The above is the entire content of this article, I hope the content of this article for everyone to learn or use d3.js can help, if you have questions you can message exchange.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.