Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SVG-raphael:存储最后选择的路径,以便可以更改元素数据_Svg_Path_Raphael_Element - Fatal编程技术网

SVG-raphael:存储最后选择的路径,以便可以更改元素数据

SVG-raphael:存储最后选择的路径,以便可以更改元素数据,svg,path,raphael,element,Svg,Path,Raphael,Element,从我的链接中,你可以在地图上选择不同的地区,在你重新选择以前选择的县之前,一切似乎都正常。与每个路径一起存储的数据值决定了它是选中的还是未选中的。我在更改元素数据方面没有问题,但是我找不到一种方法来存储最后一个选择的元素,我可以更改它的元素数据。这意味着我首先必须单击上一个县,将其元素数据设置为notSelected 首先我定义var currentcountyselected=;。这允许我存储路径[arr[This.id]].name;。当我单击一个新路径时,我可以使用$+currentcou

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

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

在拉斐尔的for循环中,我将对象数据设置为“选定”、“未选定”;因此,所有路径元素都设置为notSeelected

所以我需要的是某种方法来存储最后一条路径,这样我就可以更改它的元素数据

这是从live示例中清除的click函数

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找到了一个解决方案,但我仍然想知道如何获取以前路径或任何路径中的元素数据。

这是我的解决方案,因为它可能会帮助某些人。我问题中的链接与喜欢点击的用户有问题

全球的

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/else处理实际控制值。 在获得JSFIDLE之前,此链接将演示所需的行为

注意!此链接中的下拉菜单不起作用


我可能没有正确地看到复杂的情况,但是为什么不存储lastcountyselected并在用新值更新currentcountyselected之前用currentcountyselected的当前值更新它的值呢。然后,您就可以轻松地修改上次单击的内容了。@amadan您好,这很复杂,因为它处理的是SVG对象路径。我用与您的建议非常相似的东西让它按我的意愿工作:单击路径[previouscountyselected].value=notSelected;路径[arr[this.id]].value=isSelected;问题在于如何获取每个svg对象中的数据。