jquery 克隆,指数
创建

发布于 2024-12-11 10:25:28 字数 797 浏览 0 评论 0原文

我当前正在创建一个应用程序,用户可以在其中将项目拖到邮箱中。

他们放下物品后,会在邮箱“后面”创建一个新图像,让您感觉邮箱实际上正在掉进去。

每次有人放下物品时,我都会使用以下代码创建新图像并为其设置动画:

function animateDrop(){
animateArray.push($('.animateDrop').clone())
xArray.push(xPos)
yArray.push(yPos)

var foo = animateArray[animateArray.length - 1];
var finalxPos = xArray[xArray.length - 1];
var finalyPos = yArray[yArray.length - 1];

$('body').append(foo);
foo.css({'left': finalxPos, 'top': finalyPos + 40}).fadeIn('slow');
foo.animate({'top': '+=100px'},1500);
};
animateDrop();

执行代码时创建了一个新图像,但删除更多项目会导致正在创建的 div 呈指数增长。

它会在某个地方记住所有先前创建的 div 并将它们再次附加到正文中(至少在我看来是这样)。

我目前陷入了阻止这种情况的方法中,任何帮助将不胜感激。

2011 年 10 月 24 日更新:animateArray.push($('.animateDrop').first().clone()) 将 .first() 添加到数组推送中解决了创建多个 div 的问题。

Im currently creating an application in which user's are able to drag items to a mailbox.

After they drop the item, a new image is created "behind" the mailbox, giving you the feeling it is actually falling in.

Im using the following code to create and animate new images everytime a person drops an item:

function animateDrop(){
animateArray.push($('.animateDrop').clone())
xArray.push(xPos)
yArray.push(yPos)

var foo = animateArray[animateArray.length - 1];
var finalxPos = xArray[xArray.length - 1];
var finalyPos = yArray[yArray.length - 1];

$('body').append(foo);
foo.css({'left': finalxPos, 'top': finalyPos + 40}).fadeIn('slow');
foo.animate({'top': '+=100px'},1500);
};
animateDrop();

When the code is executed the a new image is created, but dropping more items is causing an exponential growth in div's that are being created.

Somewhere its remembering all of the previously created divs and appends all of them again to the body (atleast that is what is looks like to me).

I am currently stuck on a way to prevent this, any help would be appreciated.

UPDATE 24-10-2011: animateArray.push($('.animateDrop').first().clone())
Adding the .first() to the array push solved the problem of creating multiple divs.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

以歌曲疗慰 2024-12-18 10:25:29

你的假设是正确的。您正在复制原件和已经复制的元素全部
再来一遍。使用不同的类标识符而不是 $(".animateDrop") 或从一旦您不想再复制时删除此类

可能有更好的方法来解决您的问题 - 您可以在拖放上使用回调函数
看一下这里:http://jqueryui.com/demos/draggable/

Your assumption is right. You are copying the original & the already copied elements all
over again. Use a different class identifier instead of $(".animateDrop") or remove this class from the once u don't want to copy anymore

There is maybe a better approach for your problem - you can use a callback function on the drag/droppables
Take a look here: http://jqueryui.com/demos/draggable/

秉烛思 2024-12-18 10:25:29

只需在克隆调用之前使用 jQuery 的 first() 或 :first 选择器即可。那应该可以解决问题。

Just use jQuery's first() or :first selector before the cloning call. That should do the trick.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文