2016-08-17 48 views
-1

对不起,有趣的标题第一。为什么addClass方法首先在Jquery中运行?

我正在尝试使连锁效应。

我想要效果开始,我点击我的div,但是当我点击首先发生的连锁效应。

我在做什么错了?使用JavaScript和jQuery

Jsfiddle

$(function() { 
 

 
    $(".box").click(function(event) { 
 
    var x = event.clientX; 
 
    var y = event.clientY; 
 
    $(".ripple").css({ 
 
     "top": y - 5, 
 
     "left": x - 5 
 
    }); 
 
    $(".ripple").addClass('active'); 
 

 
    setTimeout(function() { 
 
     $(".ripple").removeClass('active'); 
 
    }, 500); 
 

 
    }); 
 

 
});
.box { 
 
    width: 200px; 
 
    height: 200px; 
 
    background: #434A54; 
 
    position: relative; 
 
    overflow: hidden; 
 
} 
 
.ripple { 
 
    width: 10px; 
 
    height: 10px; 
 
    border-radius: 100%; 
 
    transform: scale(1); 
 
    background: rgba(255, 255, 255, 1); 
 
    position: absolute; 
 
    opacity: 1; 
 
} 
 
.active { 
 
    transform: scale(60); 
 
    opacity: 0; 
 
    transition: all 0.6s linear; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="box"> 
 
    <div class="ripple"></div> 
 
</div>

回答

0

添加类animationtransition

之前;

.active { 
    transform: scale(60); 
    opacity: 0; 
    transition: all 0.6s linear; 
} 

.active { 
    animation: ripple .6s linear; 
} 
@keyframes ripple { 
    100% { 
    transform: scale(60); 
    opacity: 0; 
    } 
} 

检查它。 https://jsfiddle.net/h9s32m0o/1/

0

客户端执行异步是,这意味着你的代码将不会出现在它被宣布为同一顺序执行。您应该使用.animate()函数并截取动画函数完成后的连锁效果。

$(function() { 

    $(".box").click(function(event) { 
    var x = event.clientX; 
    var y = event.clientY; 

    $(".ripple").animate({ 
    top: y - 5, 
    left: x - 5 
    }, 1000, function() { 
    var trans = $(".ripple").addClass('active'); 

    setTimeout(function() { 
     trans.removeClass('active'); 
    }, 500); 

    }); 


    }); 

}); 

例子:https://jsfiddle.net/b1bpoqkv/1/

+0

所以,现在的方式来使我在哪里点击使用addClass涟漪效应? – Norx

+0

看看我发布的示例链接。您可能需要删除白色背景颜色,并减少当前设置为1000毫秒的动画持续时间。 – DinoMyte

+0

我也喜欢你,我知道但它不是解决方案,也不能流畅运行。 – Norx

相关问题