Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.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
jquery动画和绑定_Jquery - Fatal编程技术网

jquery动画和绑定

jquery动画和绑定,jquery,Jquery,我有一些jQuery,它动态地创建一个span元素,该元素具有css定义的特定形状。span元素在屏幕上随机的x,y位置生成,我已经用class=“.drawingpix”定义了它们。新的跨度图元与上一个相同,只是其位置每隔一两秒创建一次。我希望能够在单击时设置元素的动画。到目前为止,我只能在单击主体时设置所有元素的动画 我希望发生的事情:我希望在触摸或单击元素时设置该元素的动画,并且仅设置该元素的动画 这对我来说什么都没有: $('.drawingpix').click(functio

我有一些jQuery,它动态地创建一个span元素,该元素具有css定义的特定形状。span元素在屏幕上随机的x,y位置生成,我已经用class=“.drawingpix”定义了它们。新的跨度图元与上一个相同,只是其位置每隔一两秒创建一次。我希望能够在单击时设置元素的动画。到目前为止,我只能在单击主体时设置所有元素的动画

我希望发生的事情:我希望在触摸或单击元素时设置该元素的动画,并且仅设置该元素的动画

这对我来说什么都没有:

    $('.drawingpix').click(function () {
    // this is the dom element clicked?????
    var element = this;
    $(this).animate({
        height:'250px',
        width:'250px',
        'border-radius':'250px',
        '-moz-border-radius': '250px',
        '-webkit-border-radius': '250px',
        opacity: -0.2,
            }, 3000).fadeOut(0);    
});
当在身体中时,这会使用类“drawingpix”设置每个元素的动画,但在头部时不会设置任何动画:

    $('body').click(function () {
    // this is the dom element clicked?????
    var element = this;
    $('.drawingpix').animate({
        height:'250px',
        width:'250px',
        'border-radius':'250px',
        '-moz-border-radius': '250px',
        '-webkit-border-radius': '250px',
        opacity: -0.2,
            }, 3000).fadeOut(0);    
});
我不熟悉jquery和javascript。在我发布到这里之前,我已经做了几个小时的搜索和尝试


我想我需要了解如何获取我单击的元素的索引,并根据索引指定要设置动画的元素。任何帮助都将不胜感激。谢谢

为什么不尝试委派事件,看看这种方法是否适用于新创建的元素

 $('body').on('click', '.drawingpix' ,function () {
    // this is the dom element clicked?????
    var element = this;
    $(this).animate({
        height:'250px',
        width:'250px',
        'border-radius':'250px',
        '-moz-border-radius': '250px',
        '-webkit-border-radius': '250px',
        opacity: -0.2,
            }, 3000).fadeOut(0);    
});

我怀疑您遇到了一个几乎所有jQuery新用户都能体验到的问题。对于大多数事件处理程序,如
click()
,您必须等待DOM准备就绪。jQuery通过函数使这变得非常轻松。该函数希望您向它传递一个函数,其中包含希望在DOM就绪后调用的代码。例如,您的代码如下所示:

jQuery.ready(function(){
    $('.drawingpix').click(function(){
        // this is the dom element clicked?????
        var element = this;
        $(this).animate({
            height:'250px',
            width:'250px',
            'border-radius':'250px',
            '-moz-border-radius': '250px',
            '-webkit-border-radius': '250px',
            opacity: -0.2,
        }, 3000).fadeOut(0);
    });
});

您的
单击
处理程序的内容没有问题;它应该只适用于被单击的元素。但是,在动态创建元素时,您必须注意一些细微之处。设置处理程序时,它们仅应用于DOM中当前的对象。如果在此之后创建新元素,它们将没有单击处理程序,这可能是您遇到的问题

jQuery有一个解决方案:。这不仅会为DOM中当前的元素附加处理程序,还会在将来将其附加到所有匹配的元素。所以这正是你需要的。您只需修改代码,如下所示:

$('.drawingpix').live('click',function () {
    $(this).animate({
        height:'250px',
        width:'250px',
        'border-radius':'250px',
        '-moz-border-radius': '250px',
        '-webkit-border-radius': '250px',
        opacity: -0.2,
        }, 3000).fadeOut(0);    
});

这里有一个实用的jsFiddle:

非常感谢。这很有效,我现在正在学习授权。再次感谢!