使用wordcloud2.js,您可以在canvas-elements上创建漂亮且简单的wordcloud。我真的没有这个脚本的问题,实际上只有canvas-element一般:我想要一个响应宽度(在这种情况下与浏览器宽度有关)。
它显示正确的宽度(100%),但画布只是放大了,“图像”失真了。如果我保存“png”,它将具有脚本给出的旧/基本分辨率。
如何解决?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>canvas</title>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'>
<script src="js/wordcloud2.js"></script>
<style type="text/css">
#canvas_cloud{
width: 100%;
height:500px;
}
</style>
</head>
<body>
<canvas id="canvas_cloud"></canvas>
<script>
var options =
{
list : [
["Pear", "9"],
["Grape", "3"],
["Pineapple", "8"],
["Apple", "5"]
],
gridSize: Math.round(16 * document.getElementById('canvas_cloud').offsetWidth / 1024),
weightFactor: function (size) {
return Math.pow(size, 1.9) * document.getElementById('canvas_cloud').offsetWidth / 1024;
}
}
WordCloud(document.getElementById('canvas_cloud'), options);
</script>
</body>
</html>
答案 0 :(得分:7)
我明白了!使用&lt; div &gt;围绕画布。元素,100%宽,id为“sourrounding_div”。
<div id="sourrounding_div" style="width:100%;height:500px">
<canvas id="canvas_cloud"></canvas>
</div>
在&lt; 脚本&gt;中在 var options 之前添加:
var div = document.getElementById("sourrounding_div");
var canvas = document.getElementById("canvas_cloud");
canvas.height = div.offsetHeight;
canvas.width = div.offsetWidth;
这就是全部: - )
答案 1 :(得分:1)
<canvas>
是一个位图“画布”,只是将其视为用于绘制像素的JavaScript的<img>
。你不能让它“响应”,就像你无法在没有替换图像的情况下对图像做出反应。
尽管如此,我确实实现了一个使用<div>
作为“画布”的实验性功能,并使用<span>
s绘制文本。它们仍然是绝对定位的,但是如果你想在调整窗口大小时编写额外的JavaScript来移动它们,你可能能够实现你想要的响应效果。