【发布时间】:2013-05-12 13:26:02
【问题描述】:
我在使用 jQuery animate 为某些 div 设置位置的函数时遇到了一些问题。我用 jQuery 做了一个测验,并希望正确的“已回答”具有数字 id 的可拖动 div 自动转到具有相同 id 的目标位置 div。这是用于导航(每次只显示 12 个问题)。
HTML 看起来像这样
<div id="container"> //floats left
<div class="answer" id="1"></div> //droppables
<div class="answer" id="2"></div>
<div class="answer" id="3"></div>
<div class="answer" id="4"></div>
<div class="answer" id="5"></div>
<div class="answer" id="6"></div>
<div class="answer" id="7"></div>
<div class="answer" id="8"></div>
<div class="answer" id="9"></div>
<div class="answer" id="10"></div>
<div class="answer" id="11"></div>
<div class="answer" id="12"></div>
</div>
<div id="container>
<div class="drag" id="3"></div> //draggables are in random order
<div class="drag" id="1"></div>
<div class="drag" id="2"></div>
<div class="drag" id="6"></div>
<div class="drag" id="5"></div>
<div class="drag" id="12"></div>
<div class="drag" id="4"></div>
<div class="drag" id="8"></div>
<div class="drag" id="7"></div>
<div class="drag" id="11"></div>
<div class="drag" id="9"></div>
<div class="drag" id="10"></div>
</div>
每次有人将右边的可拖动对象放在右边的可放置对象上时,id 都会存储在一个名为 rightIds 的数组中。
假设 rightIds 是 array(0=>3, 1=>7 2=>9)
我还有一个名为 currentIds 的数组,其中包含现在显示的 ID。
currentIds 现在是 array(0=>1 to 11=>12)
我做了这个函数:
function resetAnimation(currentIds, rightIds) {
$.each(currentIds, function (index, value) {
$.each(rightIds, function(ind, val) {
console.log('currentIds value: ' + value);
console.log('rightIds val: ' + val);
if (val == value) {
var target = $('#' + value + '.answer');
console.log(target);
var targetTop = target.offset().top;
console.log('targetTop: ' + targetTop);
var targetLeft = target.offset().left;
console.log('targetLeft: ' + targetLeft);
var drag = $('#' + value + '.drag');
console.log(drag);
var dragTop = drag.offset().top;
console.log('dragTop: ' + dragTop);
var dragLeft = drag.offset().left;
console.log('dragLeft: ' + dragLeft);
drag.animate({
'top': -target.offset().top,
'left': -target.offset().left
}, 3000);
}
});
});
}
但是当我运行它时,拖动 div 不会到达目标位置,而是到达其他位置。当我检查动画元素时,偏移量与目标偏移量相同,只是在值之前有一个“-”。我希望有人能告诉我我做错了什么以及如何解决这个问题。
感谢
【问题讨论】:
-
您的 html 无效。
id属性应该是唯一的。 (这并不意味着你仍然不能实现一些 JS 来达到预期的效果,但我喜欢不鼓励使用无效的 html。) -
如果我想让两个 div 看起来一样我给它们相同的 id,为什么它必须是唯一的。
-
为什么独一无二?因为那是how the
idattribute is defined。相似的元素应该通过一个公共类进行分组。 (正如我已经说过的,打破这个规则并不一定会阻止你的页面工作,但是如果你可以不使用使用无效的html实现完全相同的效果不是更好吗?) -
好的,但这不是我目前遇到的问题。但是谢谢你的信息,我不知道。
-
就在上面的多id点上,jquery在使用$('#id')时只会拾取一个对象
标签: javascript jquery jquery-animate position target