Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.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
Javascript 如何设置存储在数组中的元素的动画?除了一个I';我在上空徘徊?_Javascript_Jquery_Raphael - Fatal编程技术网

Javascript 如何设置存储在数组中的元素的动画?除了一个I';我在上空徘徊?

Javascript 如何设置存储在数组中的元素的动画?除了一个I';我在上空徘徊?,javascript,jquery,raphael,Javascript,Jquery,Raphael,这就是我所拥有的: jQuery.each(shapes, function(i) { this.hover(function(event) { this.animate({ fill: "#fff" }, 500); }, function(event) { this.animate({

这就是我所拥有的:

    jQuery.each(shapes, function(i) { 
            this.hover(function(event) {
                this.animate({
                    fill: "#fff"
                }, 500);
            }, function(event) {
                this.animate({
                    fill: "#555"
                }, 500);
            });
    });
我使用的是raphael.js,但我认为这个问题对于jQuery语法来说是通用的

因此,当我将鼠标悬停在某个元素(存储在形状中)上时,我希望该元素保持原样,但随后更改所有其他元素的透明度。我不知道从哪里开始=\

编辑:

所以,我觉得,就语义而言,这应该是可行的:

jQuery.each(shapes, function(i) { 
        current_shape = this;
            this.hover(function(event) {
                jQuery.each(shapes, function(j){
                    if (shapes[users_with_direct_employees[j][0]] != current_shape){
                          shapes[users_with_direct_employees[j][0]].animate({
                                fill: "#fff"
                            }, 500);
                    }
                });

            }, function(event) {
                jQuery.each(shapes, function(j){
                    if (shapes[users_with_direct_employees[j][0]] != current_shape){
                          shapes[users_with_direct_employees[j][0]].animate({
                                fill: "#555"
                            }, 500);
                    }
                });
            });
    });
但只有最后一个接触的形状才会生成动画。我一会儿在这里做一个js fiddel


fiddle:

假设shapes数组是一个DOM元素数组,我认为您可以使用类似的方法,为每个形状设置一个悬停事件处理程序,然后在传递给悬停事件处理程序的每个函数中,迭代shapes数组,如果它不是您悬停的数组,则执行动画

   jQuery.each(shapes, function(i) { 
        this.hover(function(event) {
            var self = this;
            jQuery.each(shapes, function(index, value) {
                if (value != self) {
                    $(value).animate({fill: "#fff"}, 500);
                }
            });
        }, function(event) {
            var self = this;
            jQuery.each(shapes, function(index, value) {
                if (value != self) {
                    $(value).animate({fill: "#555"}, 500);
                }
            });
        });
   });
或者它可能更干净,具有本地功能:

   jQuery.each(shapes, function(i) { 

       function animateIfNotMe(me, fillValue) {
            jQuery.each(shapes, function(index, value) {
                if (value != me) {
                    $(value).animate({fill: fillValue}, 500);
                }
            });
        }

        this.hover(function(event) {
            animateIfNotMe(this, "#fff");
        }, function(event) {
            animateIfNotMe(this, "#555");
        });
   });

编辑:我看到您现在已经在问题中添加了实际的代码(因为我写了我的答案),而shapes不是DOM对象数组(如果您最初披露了这一点会更好),因此显然此代码不会像现在这样工作,但是,希望您能从这段代码中了解到如何迭代所有其他形状,并排除当前悬停的形状,然后使其适应特定的形状数据结构。

假设形状数组是一个DOM元素数组,我认为可以使用类似的方法,为每个形状设置一个悬停事件处理程序,然后在传递给悬停事件处理程序的每个函数中,迭代形状数组,如果不是悬停的形状数组,则执行动画

   jQuery.each(shapes, function(i) { 
        this.hover(function(event) {
            var self = this;
            jQuery.each(shapes, function(index, value) {
                if (value != self) {
                    $(value).animate({fill: "#fff"}, 500);
                }
            });
        }, function(event) {
            var self = this;
            jQuery.each(shapes, function(index, value) {
                if (value != self) {
                    $(value).animate({fill: "#555"}, 500);
                }
            });
        });
   });
或者它可能更干净,具有本地功能:

   jQuery.each(shapes, function(i) { 

       function animateIfNotMe(me, fillValue) {
            jQuery.each(shapes, function(index, value) {
                if (value != me) {
                    $(value).animate({fill: fillValue}, 500);
                }
            });
        }

        this.hover(function(event) {
            animateIfNotMe(this, "#fff");
        }, function(event) {
            animateIfNotMe(this, "#555");
        });
   });

编辑:我看到您现在已经在问题中添加了实际的代码(因为我写了我的答案),而shapes不是DOM对象数组(如果您最初披露了这一点会更好),因此显然此代码不会像现在这样工作,但希望您能从这段代码中了解到如何迭代所有其他形状,并排除当前悬停的形状,然后将其调整为特定的形状数据结构。

您可以使用该方法。not():


您可以使用方法。not()


我不知道拉斐尔的物体是怎么工作的。。。但是这种语法没有任何动画效果正如在中所看到的,您已经披露了更多关于实际代码的信息(在我写了我的答案之后),您将不得不根据您的特殊需求调整这个概念。您是否理解迭代形状数组并为每个项目启动动画的一般概念,除了与悬停函数中的
this
值匹配的项目外?特别是,如果形状不是DOM对象数组(我不知道它是什么,因为我不知道Raphael),您必须为每个形状获取一个DOM对象,才能为其配置.hover()事件。raphael对象有自己的.hover()事件,所以希望这能起作用。(目前正在修复由me refactoring=D引起的一系列语法错误)我不确定Raphael对象是如何工作的。。。但是这种语法没有任何动画效果正如在中所看到的,您已经披露了更多关于实际代码的信息(在我写了我的答案之后),您将不得不根据您的特殊需求调整这个概念。您是否理解迭代形状数组并为每个项目启动动画的一般概念,除了与悬停函数中的
this
值匹配的项目外?特别是,如果形状不是DOM对象数组(我不知道它是什么,因为我不知道Raphael),您必须为每个形状获取一个DOM对象,才能为其配置.hover()事件。raphael对象有自己的.hover()事件,所以希望这能起作用。(目前正在修复由我重构引起的一系列语法错误=D),但我可以=p。这些是raphael对象,不是DOM元素。@TheLindyHop好的,我已经编辑了我的答案。目前我无法访问jsfiddle.net,-.not()方法对您有效吗?但是我可以=p。这些是raphael对象,不是DOM元素。@TheLindyHop好的,我已经编辑了我的答案。我目前无法访问jsfiddle.net,-.not()方法对您有用吗?