jQuery一次为一个动态元素设置动画
jQuery animate dynamic elements one at a time
让我在前面说,我已经解决了这个线程,试图解决我的问题,但没有成功:每个元素中的淡入-一个接一个
我认为如果元素不是动态内容,它会很容易工作,但我做了一个测试div,用缩略图和一个点击按钮填充它,并分配了类似的代码,但它仍然只是简单地删除了所有元素,没有动画或犹豫。
现在,我看到的是:
function OnThumbSuccess(response) {
var $thumbs = $('#Gallery .thumbWindow .thumbReel');
var files = $.parseJSON(response.d);
$thumbs.children().each(function (i) {
$(this).delay(i*300).animate({ 'opacity': '0' }, 500, 'easeOutSine');
$(this).remove();
})
//make sure the thumb reel resets to its original position
$thumbs.css('left', '0px');
//loop through the array of json objects
for (var i = 0; i < files.length; i++) {
//images[i] = files[i].fileHREF;
InsertHTML(files[i].thumbHref, i);
}
}
所以,它应该淡出元素,然后删除它。删除它没有问题;这是动画它似乎失败了。
经过一番修改,我发现只要去掉$(this).remove()
,我确实可以随心所欲地制作它们的动画。如果我不需要去掉这些元素,那就好了。
我做什么似乎并不重要。我尝试过将.remove()
链接到animate函数的末尾,我尝试过在清空div之前设置一个等于元素数量的延迟。我尝试将用于填充缩略图div的代码从OnThumbSuccess函数移动到axax.done()函数。
我真的不知道怎样才能优雅地做这件事。如果我能提供任何其他细节,请告诉我。
我做了这个测试小提琴,也许这会有一些帮助:http://jsfiddle.net/kum8d7k9/
在写这个问题的过程中,我提出了以下解决方案,看起来效果很好:
function GetThumbnails(category) {
$.ajax({
type: "POST",
url: "Filenames.asmx/GetFiles",
contentType: "application/json; charset=utf-8",
data: '{ "folderName" : "' + category + '"}',
dataType: "json",
success: OnThumbSuccess,
failure: function (response) {
alert('failure');
}
}).done(function (response) {
//alert(response.d);
var files = $.parseJSON(response.d);
var $thumbs = $('#Gallery .thumbWindow .thumbReel');
if ($thumbs.children().length > 0) {
setTimeout(function () {
$thumbs.empty();
//loop through the array of json objects
for (var i = 0; i < files.length; i++) {
//images[i] = files[i].fileHREF;
InsertHTML(files[i].thumbHref, i);
}
}, $thumbs.children().length * 300);
}
else {
//loop through the array of json objects
for (var i = 0; i < files.length; i++) {
//images[i] = files[i].fileHREF;
InsertHTML(files[i].thumbHref, i);
}
}
}).fail(function (response) {
alert(response.responseText);
});
}
function OnThumbSuccess(response) {
var $thumbs = $('#Gallery .thumbWindow .thumbReel');
$thumbs.children().each(function (i) {
$(this).delay(i*200).animate({ 'opacity': '0'}, 200, 'easeOutSine');
})
//make sure the thumb reel resets to its original position
$thumbs.css('left', '0px');
}
我已经将.empty()
函数移动到$.ajax.done()
函数,并将其设置为超时值,该超时值等于我必须淡入的子元素数乘以动画持续时间,并留有一点回旋余地。
接下来,我必须想出一种方法来转换这些元素。这是最有教育意义的,但如果有人有更好的解决方案,我会洗耳恭听。
在动画完成之前,您不想调用.remove()
,因此您需要使用jQuery animate的完整回调函数,http://api.jquery.com/animate/.
$(this).delay(i*300).animate({ 'opacity': '0' }, 500, 'easeOutSine',
function() {
$(this).remove();
}
);
链接不起作用,因为animate函数会立即返回,而不是在动画完成后返回。
$('#remove_me').animate({
opacity: 0
}, 500, function() {
$(this).remove();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="remove_me">testing remove</div>
- 点击功能没有'ajax调用动态元素(Backbone)后无法工作
- 将动态元素绑定到函数;只剩下一个绑定
- 关于动态元素中循环中的事件
- 对动态元素使用.on()和e.stopPropagation()
- 只删除javascript中的1个动态元素
- 删除在加载dom之后创建的动态元素
- 从服务器和/或客户端加载动态元素的典型技术是什么
- IE7/8中的jQuery动态元素错误
- Jquery动态元素选择器
- AnguarJS$编译的动态元素
- 使用jQuery使动态元素可选择
- jquery在动态元素上调用日期选择器
- 如果在transclusion之后添加,为什么指令下的动态元素具有错误的作用域
- 如何使用jQuery唯一地识别具有相同id的类似动态元素
- 将单击处理程序绑定到动态元素
- 为动态元素附加事件处理程序
- 使用 jQuery 创建动态元素 单击事件始终返回 for 循环中的最后一个索引
- jQuery中的目标动态元素
- 将动态元素/行添加到 Angularjs 中的多维 Json 数组中
- Jquery 单击函数不适用于动态元素