JSXGraph:大量或未定义元素的事件

如何解决JSXGraph:大量或未定义元素的事件

我想知道是否有一种优雅的方法来处理 JSXGraph 中大量或未定义元素的事件。一个简单的例子:棋盘上有n个点,最后被点击的点应该有不同的颜色。对于几点,我可以执行以下操作:

const board = JXG.JSXGraph.initBoard('jxgBox',{ 
    boundingBox: [-5,5,-5],axis:true
});

var p = [];
p[0] = board.create('point',[1,1],{color:'red'});
p[1] = board.create('point',[-1,{color:'red'});
p[2] = board.create('point',-1],{color:'red'});
p[3] = board.create('point',{color:'red'});

p[0].on('down',function(){
     for (let i=0;i<4;i++){
       if (i==0) 
        {p[i].setAttribute({color:'blue'})}
       else 
         {p[i].setAttribute({color:'red'})}
     }
   }
);

//p[1].on('down',...); p[2].on('down',...); ...

但是如果有 100 个或不确定数量的点(例如通过单击按钮创建点)怎么办?

解决方法

一种可能性是在数组 forEach 上使用 JavaScript p 循环。下面是一个例子:

const board = JXG.JSXGraph.initBoard('jxgbox',{ 
  boundingbox: [-5,5,-5],axis:true
});

var p = [],last_idx = -1;

p[0] = board.create('point',[1,1],{color:'red'});
p[1] = board.create('point',[-1,{color:'red'});
p[2] = board.create('point',-1],{color:'red'});
p[3] = board.create('point',{color:'red'});

p.forEach(function(el,idx,p){
  el.on('down',function() {
    if (last_idx >= 0) {
      p[last_idx].setAttribute({color:'red'});
    }
    last_idx = idx;
    this.setAttribute({color:'blue'});
  });
});

出于效率原因,我们在 last_idx 中保留了最后点击点的索引。然后只需将一个点切换回红色。在 https://jsfiddle.net/vc3hLzp0/1/ 现场观看。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?