Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何选择特定的d3节点组元素

如何选择特定的d3节点组元素
EN

Stack Overflow用户
提问于 2017-11-19 21:05:40
回答 2查看 3.6K关注 0票数 2

我有一个有几个节点的D3 v4力模拟。每个节点都有一个组。当我鼠标移动到这个组中的一个元素(一个看不见的圆)上时,我希望其他元素(仅在那个特定节点上的红色圆圈,它是我给出的id“back圆形”)来做一些事情。目前,这就是我所拥有的,但是它对所有节点都是这样的,而不仅仅是我在元素上徘徊的那个节点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.node = this.d3Graph.selectAll(null)
.data(this.props.nodes)
.enter()
.append("g")
.attr("class", "nodes");

this.node.append("circle")
.attr("id", "backCircle")
.attr("r", 60)
.attr("fill", "red")


this.node.append("svg:image")
        .attr("xlink:href", function(d) { return d.img })
        .attr("height", 60)
        .attr("width", 60)
        .attr("x", -30)
        .attr("y", -30)


          this.node.append("circle")
            .attr("r", 60)
            .attr("fill", "transparent")
            .on( 'mouseenter', function(d) {
              d.r = 65;
              this.node.select("#backCircle")
              .transition()
              .attr("r", 80);

            }.bind(this))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-20 00:30:28

在做其他事情之前,有两个重要的建议:

  1. 不要在SVG中使用"transparent"
  2. ID是唯一的。因此,使用类代替(或按标签名选择)

回到你的问题:

有几种基于兄弟圆元素选择圆元素的方法。第一种方法是使用this.parentNode,使DOM继续上升,然后再次下降。第二个,如果您确切地知道兄弟姐妹的顺序,则使用previousSibling

在下面的演示中,我每个组有3个元素:一个圆、一个文本和一个矩形。悬停在矩形上将选择圆圈。

首先,使用this.parentNode的选项。就你而言:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
d3.select(this.parentNode).select(".backCircle")

悬停在广场上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var svg = d3.select("svg");
var data = [50, 150, 250];
var g = svg.selectAll(null)
  .data(data)
  .enter()
  .append("g")
  .attr("transform", function(d) {
    return "translate(" + d + ",75)"
  });

g.append("circle")
  .attr("class", "backCircle")
  .attr("r", 40)
  .attr("fill", "teal")

g.append("text")
  .attr("font-size", 20)
  .attr("text-anchor", "middle")
  .text("FOO");

g.append("rect")
  .attr("x", 20)
  .attr("y", 20)
  .attr("width", 20)
  .attr("height", 20)
  .style("fill", "firebrick")
  .on("mouseenter", function() {
    d3.select(this.parentNode).select(".backCircle")
      .transition()
      .attr("r", 50)
  }).on("mouseleave", function() {
    d3.select(this.parentNode).select(".backCircle")
      .transition()
      .attr("r", 40)
  })
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg></svg>

然后,使用previousSibling选项(在这里,您甚至不需要设置一个类)。就你而言:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
d3.select(this.previousSibling.previousSibling)

悬停在广场上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var svg = d3.select("svg");
var data = [50, 150, 250];
var g = svg.selectAll(null)
  .data(data)
  .enter()
  .append("g")
  .attr("transform", function(d) {
    return "translate(" + d + ",75)"
  });

g.append("circle")
  .attr("r", 40)
  .attr("fill", "teal")

g.append("text")
  .attr("font-size", 20)
  .attr("text-anchor", "middle")
  .text("FOO");

g.append("rect")
  .attr("x", 20)
  .attr("y", 20)
  .attr("width", 20)
  .attr("height", 20)
  .style("fill", "firebrick")
  .on("mouseenter", function() {
    d3.select(this.previousSibling.previousSibling)
      .transition()
      .attr("r", 50)
  }).on("mouseleave", function() {
    d3.select(this.previousSibling.previousSibling)
      .transition()
      .attr("r", 40)
  })
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg></svg>

PS:请记住,由于我没有使用对象,所以在我的代码片段中不需要使用bind(this)

票数 2
EN

Stack Overflow用户

发布于 2017-11-19 22:21:39

我认为您需要从其处理程序中选择触发mouseenter事件的节点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      this.node.append("circle")
        .attr("r", 60)
        .attr("fill", "transparent")
        .on( 'mouseenter', function(d) {
          var mouseenterNode = d3.select(this) 
          mouseenterNode.attr("r", 65);
          mouseenterNode.select("#backCircle")
          .transition()
            .attr("r", 80);
        }.bind(this))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47385361

复制
相关文章
ClassNotFoundException,NoClassDefFoundError,NoSuchMethodError排查
在使用java开发的过程中时常会碰到以上三个错误,其中NoClassDefFoundError、NoSuchMethodError两个error遭遇得会多一些。本文会简单分析三个异常发生的原因,并给出排查思路和相关工具。
LNAmp
2018/09/05
2K0
Java.lang.Illegalaccessexception 或 java.lang.NoSuchMethodError
今天和小伙伴讨论一个mybatis-plus的一个诡异问题,最后定位到原因竟然是lombok@Data和@Builder一起用无法添加无参构造方法引起的,非常隐蔽。
AlbertZhang
2020/09/16
9810
Sqoop 连接mysql 错误 java.lang.NoClassDefFoundError
原因在异常中已经很明显了:没有找到类 org.apache.commons.lang.StringUtils  也就是说Sqoop中没有这个类或者包含这个类的jar包。但是我查看lib目录下的jar包,是包含commons-lang3的。上网查到因为Sqoop版本大部分是支持2 的。
来自银河系的员程序
2022/02/11
1.8K0
Sqoop 连接mysql 错误 java.lang.NoClassDefFoundError
NoClassDefFoundError
在new JettisonMapperdXmlDriver()对象时 其构造器如下
Jack Chen
2018/09/14
1.1K0
NoClassDefFoundError
日常问题——flume连接hive时报错Caused by: java.lang.NoSuchMethodError
今天新安装的flume,使用flume来做kafka与hive对接时出现了以下两个的错误:
栗筝i
2022/12/01
5520
java.lang.NoSuchMethodError
NoSuchMethodError是一个运行时错误,在编译时一般不会出现这个错误。
Java廖志伟
2022/09/29
1K0
解决在 Spring Boot 中运行 JUnit 测试遇到的 NoSuchMethodError 错误
在本文章中,我们将会解决在 Spring Boot 运行测试的时候,得到 NoSuchMethodError 和 NoClassDefFoundError 的 JUnit 错误。
HoneyMoose
2022/08/25
2.8K0
解决在 Spring Boot 中运行 JUnit 测试遇到的 NoSuchMethodError 错误
NoClassDefFoundError: org/hibernate/engine/transaction/spi/TransactionContext
本文介绍了如何使用Spring Boot和Spring Data JPA简化Hibernate和MySQL的CRUD操作,展示了如何利用Spring Data JPA简化代码,提高开发效率。同时,还介绍了如何使用Spring Data JPA进行分页查询和排序,以及如何使用Hibernate进行原生SQL查询。
程裕强
2018/01/02
3.1K0
ClassNotFoundException v/s NoClassDefFoundError
在这个小节里,我们讨论一下ClassNotFoundException与NoClassDefFoundError的区别。
Erossssssss
2021/04/09
1.3K0
ClassNotFoundException v/s NoClassDefFoundError
lagou 爪哇 3-2 zookeeper 笔记
分布式系统的协调工作就是通过某种方式,让每个节点的信息能够同步和共享。这依赖于服务进程之间的通信。通信方式有两种:
acc8226
2022/05/17
4050
lagou 爪哇 3-2 zookeeper 笔记
lagou 爪哇 3-3 dubbo 笔记
Apache Dubbo是一款高性能的 Java RPC 框架。其前身是阿里巴巴公司开源的一个高性能、轻量级的开源 Java RPC框架,可以和 Spring 框架无缝集成。
acc8226
2022/05/17
4410
lagou 爪哇 3-3 dubbo 笔记
NoClassDefFoundError: ch/qos/logback/classic/spi/ThrowableProxy
This warning, i.e. not an error, message is reported when no SLF4J providers could be found on the class path. Placing one (and only one) of slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar on the class path should solve the problem. Note that these providers must target slf4j-api 1.8 or later.
一个会写诗的程序员
2018/08/17
6.2K0
解决WIFI无线连接或连接上很慢
    随着移动互联网的发展,很多公司和家庭都通过WIFI上网。对于众多使用WIFI的人来说,多多少少会遇得到很多WIFI问题,我就列3个常用的WIFI问题,看看是如何解决的。
全栈程序员站长
2021/09/07
2.5K0
用最简单的一个例子看maven冲突的解决办法
java.lang.NoSuchMethodError: com.flash.conflict.b.BClass.method2()V
全栈程序员站长
2021/04/07
3570
类加载常见错误总结,写得非常好!
作者:fredalxin 地址:https://fredal.xin/classloader-error
肉眼品世界
2021/05/07
1.1K0
类加载常见错误总结,写得非常好!
NoClassDefFoundError 和 ClassNotFoundException异常
1.简介 ClassNotFoundException和NoClassDefFoundError是当JVM无法找到classpath请求的类发生。
FHAdmin
2021/08/04
1.1K0
lagou 爪哇 1-3 spring mvc 笔记
作业一: 手写MVC框架基础上增加如下功能 1)定义注解@Security(有value属性,接收String数组),该注解用于添加在Controller类或者Handler方法上,表明哪些用户拥有访问该Handler方法的权限(注解配置用户名)
acc8226
2022/05/17
1.1K0
lagou 爪哇 1-3 spring mvc 笔记
Java 类加载器解析及常见类加载问题
原文 https://www.toutiao.com/article/6812564562244534787 java.lang.ClassLoader 每个类加载器本身也是个对象——一个继承 java.lang.ClassLoader 的实例。每个类被其中一个实例加载。我们下面来看看 java.lang.ClassLoader 中的 API, 不太相关的部分已忽略。 package java.lang; public abstract class ClassLoader {   public Clas
程序猿DD
2022/06/13
1K0
Java 类加载器解析及常见类加载问题
android-NoSuchMethodError-错误记录
java.lang.NoSuchMethodError: No virtual method addOnPageChangeListener(Landroid/support/v4/view/ViewPager$OnPageChangeListener;)V in class Landroid/support/v4/view/ViewPager; or its super classes (declaration of ‘android.support.v4.view.ViewPager’ appears in /data/data/com.weijie.ckapp/files/instant-run/dex/slice-support-v4-r7_6b487e8b8eac5541972e73dc0c160b63dd97c123-classes.dex)
tea9
2022/07/16
5610
lagou 爪哇 1-1 mybatis 笔记
Mybatis框架是一个半自动的ORM持久层框架,也可以在Java中实现类似 insert(User)的操作最终操作数据库,但是需要我们自己写Sql语句。Mybatis是目前比较流行的Dao层框架。
acc8226
2022/05/17
7940

相似问题

卡桑德拉火花连接器- NoSuchMethodError: NoSuchMethodError

35

带火花卡桑德拉连接器的NoSuchMethodError

11

火花卡桑德拉连接

11

电火花卡桑德拉连接器NoclassDefFoundError,util/日志记录

114

火花卡桑德拉NoClassDefFoundError番石榴/cache/CacheLoader

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文