javascript-d3.js html中的getIntersectionList
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-d3.js html中的getIntersectionList,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1816字,纯文字阅读大概需要3分钟。
内容图文
![javascript-d3.js html中的getIntersectionList](/upload/InfoBanner/zyjiaocheng/678/efec85be44d0456f8518ac8868b73b5f.jpg)
我试图重现this post中解释的this SVG的行为,但将JavaScript放在HTML页面中,并使用D3.js.我尝试这样:
<!DOCTYPE html>
<meta charset="utf-8">
<body>
<script src="http://d3js.org/d3.v3.js"></script>
<script>
var svg = d3.select("body").append("svg")
.attr("width", 300)
.attr("height", 300)
.attr("id","svgBox");
var svgRect = svg.append("rect")
.attr("width", 200)
.attr("height", 200)
.attr("x", 50)
.attr("y", 50)
.attr("id","rect1")
.style("fill", "#AAFFAA")
.style("stroke", "#222222");
var root = document.getElementById("svgBox");
var rpos = root.createSVGRect();
rpos.x = 150;
rpos.y = 150;
rpos.width = rpos.height = 1;
var list = root.getIntersectionList(rpos, null);
console.info(list);
</script>
但这是行不通的.在Firefox中尝试时,错误是
TypeError: root.getIntersectionList is not a function
而且在Chrome中,没有错误,但是该功能似乎无法正常工作,因为列表中的结果始终为空.
有没有一种方法可以调用该函数,或者应该使用其他方法检测该点是否在路径内?
解决方法:
由于该浏览器尚不支持getInsectionList方法:7000,因此会出现Firefox错误
关于Chrome,我认为您有一个计时问题,即在执行getIntersectionList调用时未渲染svg节点.如果将代码推送到事件循环的末尾,它应该可以工作:
window.setTimeout(function(){
// your original code as-is:
var root = document.getElementById("svgBox");
var rpos = root.createSVGRect();
rpos.x = 150;
rpos.y = 150;
rpos.width = rpos.height = 1;
var list = root.getIntersectionList(rpos, null);
console.info(list);
},0)
无论如何,您可能都会在其他事件(例如鼠标单击)中使用此功能,但是以上内容应该可以证明这一概念.
关于交集测试的替代方法(除非仅支持Chrome,否则可能需要使用该方法),请参见以下问题:d3 – see what is at a particular x,y position
关于代码效率的另一个不相关的建议:d3有一个node() method,它为您提供了选择的基础DOM节点.由于您已经引用了d3的svg对象,因此可以更改此设置:
var root = document.getElementById("svgBox");
对此:
var root = svg.node();
内容总结
以上是互联网集市为您收集整理的javascript-d3.js html中的getIntersectionList全部内容,希望文章能够帮你解决javascript-d3.js html中的getIntersectionList所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。