0

当前状态

从我的链接中,您可以在地图上选择不同的地区,一切似乎都在工作,直到您重新选择之前选择的县。与每条路径一起存储的数据值决定是它isSelected还是notSelected. 我在更改刚刚单击的元素数据方面没有问题,this但我找不到以可以更改元素数据的方式存储最后一个选定元素的方法。这意味着我首先必须单击上一个县将其元素数据设置为notSelected

首先我定义var currentcountyselected = "";. 这允许我存储paths[arr[this.id]].name;. 当我单击新路径时,我可以更改最后一个路径填充$('#'+currentcountyselected).attr({fill: attributes.fill});

在 Raphael 的 for 循环中,我设置obj.data('selected', 'notSelected');了所有路径元素都设置为notSeelected.

所以我需要一些方法来存储最后一个路径,这样我就可以改变它的元素数据

这是从现场示例中清除的点击功能。

obj.click(function(){
if(this.data('selected') == 'notSelected')
    {this.animate({fill: '#698B22'  }, 300);                
    this.data('selected', 'isSelected');
    $('#'+currentcountyselected).attr({fill: attributes.fill}); 
    paths[arr[this.id]].value = "isSelected";
    currentcountyselected = paths[arr[this.id]].name;
    }
else
    {this.animate({fill: '#32CD32'}, 300);                  
    paths[arr[this.id]].value = "notSelected"; /* set path value*/
    this.data('selected', 'notSelected');                       
    }   
});/* end mark selections */

我已经在这个项目上工作了一段时间,客户现在希望界面以不同的方式工作。这真的占用了我的时间。


编辑:
虽然我通过简单地取出解决方案找到了解决方案,但if/else我仍然想知道如何获取先前路径(或任何路径)中的元素数据。

4

1 回答 1

0

这是我的解决方案,因为它可能对某人有帮助而发布。我的问题中的链接在点击满意的用户方面存在问题。


全局变量

var previouscountyselected = "Mayo"; /* default start, can be any county(path) */
var start = true;
var past = null;

更改代码

obj.click(function(){
if(paths[arr[this.id]].value == 'notSelected')
    {
    this.animate({fill: '#698B22'}, 200);
    paths[previouscountyselected].value = "notSelected";
    paths[arr[this.id]].value = "isSelected";
    previouscountyselected = paths[arr[this.id]].name;

    if (!start && past != this)
        {
            past.animate({ fill: '#fff' }, 200);
        }
    past = this;
    start = false;                  
}
else if(paths[arr[this.id]].value == 'isSelected')
{
    this.animate({fill: '#32CD32'}, 200);
    paths[arr[this.id]].value = "notSelected"; /* set path value */ 
}
});

概述 if (!start && past != this)有点不寻常,是必需的,否则动画淡入淡出会变得混乱和不稳定。如果是第一次单击路径,则不会触发淡入淡出,并且如果您只是锤击一条路径,它不会淡入白色。主要的if/else处理实际的控制值。在我得到一个 jsfiddle 之前,这个链接将展示所需的行为。


笔记!此链接中的下拉菜单不起作用。

点击快乐友好

于 2012-06-25T16:53:56.680 回答