13

我正在通过 jQuery 制作一些火箭发射效果。当我点击火箭时,它会与另一个火箭图像交换,然后发射。当我单击“重置”链接时,Rocket 必须重置起始位置,并且图像必须恢复。但是有两个问题。首先,“我的火箭形象没有恢复”。第二 - 在它恢复到初始位置后,如果我再次点击 Rocket,它不会启动。你能看到并找到我的解决方案吗?

http://jsfiddle.net/thisizmonster/QQRsW/

$("#resetlink").click(function(){
    clearInterval(timerRocket);
    $("#wrapper").css('top', '250px');
    $("#rocket").attr('src', 'http://www.kidostore.com/images/uploads/P-SAM-rocket-blk.jpg');
});

您可以看到 $("rocket").attr() 行。

4

2 回答 2

9

您在此处删除原始图像:

newImg.animate(css, SPEED, function() {
    img.remove();
    newImg.removeClass('morpher');
    (callback || function() {})();
});

剩下的就是newImg. 然后,您使用以下方法重置链接引用图像#rocket

$("#rocket").attr('src', ...

但是您newImg没有id属性,更不用说idof 了rocket

要解决此问题,您需要删除img然后将id属性设置newImgrocket

newImg.animate(css, SPEED, function() {
    var old_id = img.attr('id');
    img.remove();
    newImg.attr('id', old_id);
    newImg.removeClass('morpher');
    (callback || function() {})();
});

然后你会再次得到闪亮的黑色火箭:http: //jsfiddle.net/ambiguous/W2K9D/

更新:更好的方法(如 mellamokb 所述)是隐藏原始图像,然后在您点击重置按钮时再次显示它。首先,将重置操作更改为如下所示:

$("#resetlink").click(function(){
    clearInterval(timerRocket);
    $("#wrapper").css('top', '250px');
    $('.throbber, .morpher').remove(); // Clear out the new stuff.
    $("#rocket").show();               // Bring the original back.
});

newImg.load函数中,获取图像的原始大小:

var orig = {
    width: img.width(),
    height: img.height()
};

最后,完成变形动画的回调变成了这样:

newImg.animate(css, SPEED, function() {
    img.css(orig).hide();
    (callback || function() {})();
});

新的和改进的:http: //jsfiddle.net/ambiguous/W2K9D/1/

插件外部的泄漏$('.throbber, .morpher')并不是最好的事情,但只要记录在案就没什么大不了的。

于 2011-05-13T03:33:17.423 回答
3
  1. 函数imageMorph将创建一个新的 img 元素,因此删除了 id。变成

    $("#wrapper > img")

  2. 如果你想再次火箭发射,你应该使用 live() 函数进行点击事件。

更新演示:http: //jsfiddle.net/ynhat/QQRsW/4/

于 2011-05-13T03:41:32.827 回答