- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使 D3 圆环图看起来响应迅速,但我希望它在任何屏幕 (div) 调整大小时都能 100% 响应。这个想法是计算父 div 的对 Angular 线并使用它来更改半径、字体大小等。在下面的这种情况下,我使用了对 Angular 线而不是调整大小功能。
是否可以快速使用调整大小功能来更改图例的半径、字体大小、矩形大小?如果它是条形图,调整大小功能将非常简单。在这种情况下,我想知道是否值得在每个 D3 图表中创建一个基础。如果我使用这个基础:http://jsfiddle.net/radomer/zc8akt40/我可以更改代码以使我的图形响应吗?我猜,如果是的话,我将不得不更改基本代码,因为我正在丢失悬停时图表中的动画。
//Calculate the diagonal of the parent sreen div
console.log('width')
console.log(window.innerWidth);
console.log('height')
console.log(window.innerHeight);
console.log('final');
console.log(Math.sqrt(Math.pow(window.innerWidth,2) + Math.pow(window.innerHeight,2)));
var diagonal = Math.sqrt(Math.pow(window.innerWidth,2) + Math.pow(window.innerHeight,2))/5;
//Create the D3 chart
var margin = {top: 20, right: 20, bottom: 50, left: 20},
width = parseInt(d3.select("#chart").style("width")) - margin.left - margin.right,
height = parseInt(d3.select("#chart").style("width")) - margin.top - margin.bottom,
r = diagonal,
inner = diagonal/2,
color= d3.scale.ordinal()
.range(["#124", "#214183", "#3061c2", "#4876d1", "#87a5e1", "#c5d4f1"]);
data = [{"label":"ONE", "value":194},
{"label":"TWO", "value":567},
{"label":"THREE", "value":1314},
{"label":"FOUR", "value":793},
{"label":"FIVE", "value":1929},
{"label":"SIX", "value":1383}];
var total = d3.sum(data, function(d) {
return d3.sum(d3.values(d));
});
var svg = d3.select('#chart').append("svg:svg");
var vis = svg.data([data])
.attr("width", '100%')
.attr("height", '100%')
.attr('viewBox',(-width / 2 ) + ' ' + (-height/2) + ' '+width +' '+height)
.attr('preserveAspectRatio','xMinYMin')
var textTop = vis.append("text")
.attr("dy", ".35em")
.style("text-anchor", "middle")
.attr("class", "textTop")
.text( "TOTAL" )
.attr("y", -10),
textBottom = vis.append("text")
.attr("dy", ".35em")
.style("text-anchor", "middle")
.attr("class", "textBottom")
.text(total.toFixed(2) + "m")
.attr("y", 10);
var arc = d3.svg.arc()
.innerRadius(inner)
.outerRadius(r);
var arcOver = d3.svg.arc()
.innerRadius(inner + 5)
.outerRadius(r + 5);
var pie = d3.layout.pie()
.value(function(d) { return d.value; });
var arcs = vis.selectAll("g.slice")
.data(pie)
.enter()
.append("svg:g")
.attr("class", "slice")
.on("mouseover", function(d) {
d3.select(this).select("path").transition()
.duration(200)
.attr("d", arcOver)
textTop.text(d3.select(this).datum().data.label)
.attr("y", -10);
textBottom.text(d3.select(this).datum().data.value.toFixed(2))
.attr("y", 10);
})
.on("mouseout", function(d) {
d3.select(this).select("path").transition()
.duration(100)
.attr("d", arc);
textTop.text( "TOTAL" )
.attr("y", -10);
textBottom.text(total.toFixed(2) + "m");
});
arcs.append("svg:path")
.attr("fill", function(d, i) { return color(i); } )
.attr("d", arc);
var legend = svg.append("svg")
.attr("class", "legend")
//.attr("width", r)
//.attr("height", r * 2)
.selectAll("g")
.data(data)
.enter().append("g")
.attr("transform", function(d, i) { return "translate(" + (r + 20) + "," + i * 20 + ")"; });
legend.append("rect")
.attr("width", 18)
.attr("height", 18)
.style("fill", function(d, i) { return color(i); });
legend.append("text")
.attr("x", 24)
.attr("y", 9)
.attr("dy", ".35em")
.text(function(d) { return d.label; });
*{
font-family: 'Roboto', sans-serif;
text-transform:capitalize;
margin: 0 auto;
text-align:left;
}
body {
font-family: "Roboto"!important;
width: 100%;
height: 400px;
position: relative;
}
.slice path {
stroke: #fff;
stroke-width: 1px;
}
.textTop {
font-size: 12pt;
fill: #bbb;
}
.textBottom {
fill: #444;
font-weight: bold;
font-size: 18pt;
}
.top {
border: 1px solid #bbb;
color: #777;
padding: 5px;
text-decoration: none;
}
.top:hover {
border: 1px solid #555;
color: #333;
}
<script src="https://code.jquery.com/jquery-1.9.1.js"></script>
<script src="https://d3js.org/d3.v3.min.js"></script>
<div id="chart"></div>
最佳答案
您可以使用 svg
标签中的 viewBox
属性创建一个独立于实际屏幕尺寸的坐标系,然后使用 style="width : x%; "
根据可用宽度调整图像大小(与 img
相同,您只能使用高度/宽度之一来让另一个按宽高比调整)。
这是它的样子:
<svg id="scalesvg" viewBox="0 0 100 100">
和CSS
#scalesvg { width: 20%; }
我现在有一个 100x100 坐标系,我可以在其中使用 0 到 100 之间的绝对坐标进行绘制。浏览器仍会调整大小。
但是,它也会调整字体大小,因此您可能会想出改变字体大小的媒体查询,并可能将文本向上/向下翻译几个像素,以真正创造良好的体验。
我找到了一篇很好的博客文章,解释了所有细节(不是我的 - 赞美归功于撰写和分享它的人):http://www.sarasoueidan.com/blog/svg-coordinate-systems/
另外:您可以在这里找到我的试驾代码笔(更改浏览器窗口大小进行测试):https://codepen.io/sebredhh/pen/jvJGry
关于javascript - 屏幕调整大小的响应式 D3 圆环图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52440880/
我正在尝试检查 Entry 中是否存在重复项,并使用内联消息提醒用户该数字存在。 $(document).ready(function(){ $("#con1").blur(function(
我有一个基于类的 View 。我在引导模式上使用 Ajax。为了避免页面刷新,我想使用此类基于 View 返回 JSON 响应而不是 HTTP 响应,但我只看到了如何为基于函数的 View 返回 JS
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我有一个大型内部企业基于 Web 的应用程序在 IIS6 上运行 ASP.NET 3.5,生成 401 个“未经授权”响应,然后是 200 个“Ok”响应(如 Fiddler 所述)。我知道为什么会发
感谢您研究我的问题。 我有一个node/express服务器,配置了一个server.js文件,它调用urls.js,而urls.js又调用 Controller 来处理http请求,所有这些都配置相
当我使用以下命令时,我得到正确的 JSON 响应: $ curl --data "regno=&dob=&mobile=" https://vitacademics-rel.herokuapp.co
我有一个非常简单的 RESTful 服务,它通过 POST 接收一些表单数据,其目的是在云存储(Amazon S3、Azure Blob 存储等)中简单地保留文本主体(具有唯一 ID)作为一个文件..
UDP 不发送任何 ack,但它会发送任何响应吗? 我已经设置了客户端服务器UDP程序。如果我让客户端向不存在的服务器发送数据,那么客户端会收到任何响应吗? 我的假设是; 客户端 --> 广播服务器地
我有一个电梯项目,其中 有一个扩展 RestHelper 的类,看起来像这样 serve{ "api" / "mystuff" prefix { case a
我们正在寻求覆盖 Kong 错误响应结构并编写自定义消息(即用我们的自定义消息替换“超出 API 速率限制”、“无效的身份验证凭据”等)。 我们要找的错误响应结构(代码是自定义的内部错误代码,与HTT
我正在尝试监听 EKEventStoreChangedNotification 以检查当我的应用程序处于后台时日历是否已更改。 我在 View Controller 的 initWithNibMeth
我了解 javascript,并且正在学习 ASP.NET C# 我想要做什么(完成的是javascript): document.getElementById('divID-1'
是否可以过滤所有 har 对象并仅获取 POST 请求/响应?也许在初始化 BrowserMobProxyServer 期间是这样做的方法?我需要将 har 对象保存到文件中并上传到 har 查看器。
我正在尝试向 Oauth 的 API 发送响应。遗憾的是,Symfony2 文档在解释 $response->headers->set(...); 的所有不同部分方面做得很差。 这是我的 OauthC
我正在尝试测试用例来模拟 api 调用,并使用 python 响应来模拟 api 调用。 下面是我的模拟, with responses.RequestsMock() as rsps: url
在尝试在 Haskell 中进行一些领域驱动设计时,我发现自己遇到了这个问题: data FetchAccessories = FetchAccessories data AccessoriesRes
我正在与 ANT+ USB 棒连接,并用项目 react 器替换我自己天真的“MessageBus”,因为它看起来非常合适。 USB接口(interface)本质上是异步的(单独的输入/输出管道),我
我正在将项目迁移到AFNetworking 2.0。使用AFNetworking 1.0时,我编写了代码来记录控制台中的每个请求/响应。这是代码: -(AFHTTPRequestOperation *
我有以下代码段。 ajaxRequest.onreadystatechange = function(){ if(ajaxRequest.readyState == 4){
我有问题......我在 php 中有一个监听器脚本可以执行以下操作: if ($count != 1) {echo 'no';} else { echo "yes";} 因此它会回显"is"或“
我是一名优秀的程序员,十分优秀!