用d3.js画出带米字格的汉字

最终要实现的效果:

 

我们先用d3.js画出一个带米字格的汉字:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>汉字米字格</title>
		<link rel="stylesheet" type="text/css" href="styles.css"/>
		<script type="text/javascript" src="d3.v4.min.js"></script>
	</head>

	<body>
		<script type="text/javascript">
			var body = d3.select("body");


function createChar(){
	var width = 500,
		height = 500,
		color = '#c41b14',
		left = 200, 
		top = 200,
		size = 200; 

	var svg = d3.select("body").append("svg");
	svg.attr('width', width).attr('height', height);

	//内横线
	svg.append('line')
		.attr('x1',left)
		.attr('y1',top + size/2)
		.attr('x2',left + size)
		.attr('y2',top + size/2)
		.attr('stroke',color)
		.attr('stroke-width', 1);

	//内竖线
	svg.append('line')
		.attr('x1',left + size/2)
		.attr('y1',top)
		.attr('x2',left + size/2)
		.attr('y2',top + size)
		.attr('stroke',color)
		.attr('stroke-width', 1);

	//内斜线1
	svg.append('line')
		.attr('x1',left)
		.attr('y1',top)
		.attr('x2',left + size)
		.attr('y2',top + size)
		.attr('stroke',color)
		.attr('stroke-dasharray', '5,5')
		.attr('stroke-width', 1);

	//内斜线2
	svg.append('line')
		.attr('x1',left)
		.attr('y1',top + size)
		.attr('x2',left + size)
		.attr('y2',top)
		.attr('stroke',color)
		.attr('stroke-dasharray', '5,5')
		.attr('stroke-width', 1);

	//外框线
	svg.append('rect')
		.attr('fill','transparent')
		.attr('stroke',color)
		.attr('stroke-width', 5)
		.attr('x',left)
		.attr('y',top)
		.attr('width',size)
		.attr('height',size);

	//汉字
	svg.append('text')
		.attr('x',left)
		.attr('y',top+size-20)
		.style('font-size', '200px')
		.style('font-family', 'Kaiti')
		.attr('fill','black')
		.text('国');

}

createChar();
		</script>
	</body>
</html>

 

再带上数据实现批量生产:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>汉字米字格</title>
		<link rel="stylesheet" type="text/css" href="styles.css"/>
		<script type="text/javascript" src="d3.v4.min.js"></script>
	</head>

	<body>
		<script type="text/javascript">
			var body = d3.select("body");


var chars = ["水","波","不","兴"];

function createChar(data){
	var width = 1200,
		height = 500,
		color = '#c41b14',
		left = 200, 
		top = 200,
		size = 200; 

	var svg = d3.select("body").append("svg");
	svg.attr('width', width).attr('height', height);

	//内横线
	svg.selectAll('line.inner-horizontal')
		.data(data)
		.enter()
		.append('line')
		.classed('inner-horizontal',true)
		.attr('x1',(d,i)=>{return left + i*size;})
		.attr('y1',top + size/2)
		.attr('x2',(d,i)=>{return left + size + i*size;})
		.attr('y2',top + size/2)
		.attr('stroke',color)
		.attr('stroke-width', 1);

	//内竖线
	svg.selectAll('line.inner-vertical')
		.data(data)
		.enter()
		.append('line')
		.classed('inner-vertical',true)
		.attr('x1',(d,i)=>{return left + size/2 + i*size;})
		.attr('y1',top)
		.attr('x2',(d,i)=>{return left + size/2 + i*size;})
		.attr('y2',top + size)
		.attr('stroke',color)
		.attr('stroke-width', 1);

	//内斜线1
	svg.selectAll('line.inner-dashed1')
		.data(data)
		.enter()
		.append('line')
		.classed('inner-dashed1',true)
		.attr('x1',(d,i)=>{return left+i*size;})
		.attr('y1',top)
		.attr('x2',(d,i)=>{return left + size + i*size;})
		.attr('y2',top + size)
		.attr('stroke',color)
		.attr('stroke-dasharray', '5,5')
		.attr('stroke-width', 1);

	//内斜线2
	svg.selectAll('line.inner-dashed2')
		.data(data)
		.enter()
		.append('line')
		.classed('inner-dashed2',true)
		.attr('x1',(d,i)=>{return left+i*size;})
		.attr('y1',top + size)
		.attr('x2',(d,i)=>{return left + size + i*size;})
		.attr('y2',top)
		.attr('stroke',color)
		.attr('stroke-dasharray', '5,5')
		.attr('stroke-width', 1);

	//外框线
	svg.selectAll('rect.frame')
		.data(data)
		.enter()
		.append('rect')
		.classed('frame',true)
		.attr('fill','transparent')
		.attr('stroke',color)
		.attr('stroke-width', 5)
		.attr('x',(d,i)=>{return left+i*size;})
		.attr('y',top)
		.attr('width',size)
		.attr('height',size);

	//汉字
	svg.selectAll('text.chars')
		.data(data)
		.enter()
		.append('text')
		.classed('chars',true)
		.attr('x',(d,i)=>{return left+i*size;})
		.attr('y',top+size-20)
		.style('font-size', '200px')
		.style('font-family', 'Kaiti')
		.attr('fill','black')
		.text(d=>{return d;});

}

createChar(chars);
		</script>
	</body>
</html>

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值