创建动态 Two.js 变量以涉及单个点击事件
Create dynamic Two.js variables to involve individual click event
在创建 two.js 对象时,以下是以下部分:
var circle1 = two.makeCircle(676,326,25);
circle1.noStroke().fill = getRandomColor();
circle1.domElement = document.querySelector('#two-' + circle1.id);
$(circle1.domElement)
.css('cursor', 'pointer')
.click(function(e) {
circle1.fill = getNonMainRandomColor(getRandomColor());
});
我尝试将所有必要的参数保存在一个数组中,如下所示:
[x position, y position, radius, color]
所以我有功能
function showCircles(array) {
for(var i = 0; i < array.length; i++) {
var rotato = two.makeCircle(array[i][0],array[i][1],array[i][2]);
rotato.noStroke().fill = array[i][3];
rotato.domElement = document.querySelector('#two-' + rotato.id);
$(rotato.domElement).css('cursor', 'pointer').click(function(e) {rotato.fill = getNonMainRandomColor(getRandomColor());});
}
}
后者的问题在于线条
rotato.domElement = document.querySelector('#two-' + rotato.id);
$(rotato.domElement).css('cursor', 'pointer').click(function(e) {rotato.fill = getNonMainRandomColor(getRandomColor());});
每次触发时都需要一个新变量,因此输出是一组圆圈,当单独单击时,只有最后一个圆圈会改变颜色,因为我的设置是由每个圆圈和迭代都应该是新的var rotato
引起的。
如何使变量动态化,或者是否有更好的解决方案来解决这种混乱?
这是一个代码笔叉。
这里的问题是JavaScript的for
语句不会为每次迭代创建闭包。结果,当单击任何圆圈时,它会查找对rotato
的引用。此变量在每次迭代中重复使用,结果是你所说的数组中的最后一项。
我已经分叉并制作了一个新的代码笔,它使用下划线.js的map
方法,该方法捆绑在两个.js中。这类似于 for
语句,不同之处在于每次迭代它都会创建一个闭包,对正在构造的每个rotato
变量进行独立引用。
http://codepen.io/anon/pen/ylzvx
相关文章:
- 无法在系列中为 Highstock API 设置单个点颜色,它适用于 Highchart API
- 如何使用jQuery跟踪单个dom元素上的点击事件,并相应地更新其点击计数器
- 我可以在Highcharts中用堆叠的列为单个点上色吗
- jQuery:单个更改事件以触发多个函数不起作用
- 创建动态 Two.js 变量以涉及单个点击事件
- 在 OpenLayers 3 中的单个点上设置两种样式
- 单击折线图中的单个点但不单击条形图中单个条形时显示的引导模式
- 为单个定期事件保存单个 DHTMLX 计划程序事件记录
- 使用角度谷歌地图无法将点击事件绑定到用于显示单个窗口的标记
- 如何在Highcharts中的点事件函数中获取图表对象
- 高点突出显示线上的单个点
- 将图折叠到D3中的单个点
- 在单个全局事件处理程序中捕获所有单击事件是否是一个坏主意
- 将Wicket中的AjaxFormComponentUpdatingBehaviors链接到单个Javascript事件
- 打开图层点事件
- 在jQuery流图上添加或突出显示单个点
- 每个用户的单个点赞数
- 使用google API javascript v3 MarkerManager添加单个点
- D3:如何在折线图中显示单个点
- 高图散点图中单个点的颜色