我正在尝试使用CSS和
Javascript创建辐射圆效果.我的想法是每隔一段时间创建一个圆圈的新副本,然后在几秒钟后删除它们.
它运行良好几秒钟,但似乎圆圈被移除得太快,因为它们不会辐射超过一会儿.
CSS
.circle { width: 300px; height: 300px; border-radius: 50%; border: 3px solid #000; -webkit-transition: all 2s linear; -webkit-transform: scale(0.1); position: absolute; top: 0; left: 0; } .circle.zoom { opacity: 0; -webkit-transform: none; }
使用Javascript
counter = 0; function createCircle(){ // Circle ID var circleID = "circle_" + counter; // Add circle to document $("body").append("<div class='circle' id='" + circleID + "'></div>"); $thisCircle = $("#" + circleID); // add "zoom" class setTimeout(function(){ $thisCircle.addClass("zoom"); },10); // Remove circle setTimeout(function(){ $thisCircle.remove(); },3000); counter++; } setInterval(function(){ createCircle(); },500);
JSFiddle演示:http://jsfiddle.net/YaKBH/9/
解决方法
你忘了将$thisCircle变量设置为闭包范围的本地变量,它是一个隐式全局变量. 3秒后,它将开始删除当前圆圈(已设置为500毫秒的动画).圆圈0到4将保留在DOM中,不透明度为0.
要解决此问题,只需添加另一个var
keyword:
var $thisCircle = $("#" + circleID);
顺便说一句,您可以省略该计数器变量并直接引用刚刚创建的元素:
setInterval(function createCircle() { var $thisCircle = $("<div class='circle'></div>").appendTo("body"); // add "zoom" class with minimal delay so the transition starts setTimeout(function () { $thisCircle.addClass("zoom"); },0); // Remove circle setTimeout(function () { $thisCircle.remove(); },3000); },500);
(demo)