如何将两个帧拖到一起?(jQuery)

时间:2011-07-06 01:03:45

标签: javascript jquery html

我正在使用javascript / jQuery进行一个whack-a-mole项目,我想让用户能够将这些洞拖到屏幕上他们喜欢的位置,然后按开始开始播放(鼹鼠开始从漏洞中弹出)但是,首先我需要一个启动按钮来执行此操作,然后我需要将这两个图像一起移动,此时我实现此jQuery代码

<SCRIPT>
$(document).ready(function(){
$("#div").draggable();
});
</SCRIPT>
在div下,它们都变得可以拖拽,但是由于显而易见的原因,它们并没有拖到一起。例如,当我将孔.gif移动到不同的位置时,鼹鼠.gif保持在原始位置。我需要它们一起移动。至于开始按钮,它应该相对简单,但我无法弄清楚如何让函数不能在加载时运行,只能在按钮点击上运行。无论如何,这是我目前的项目,我知道这很邋.. :P

<html>
<body>

<!--CURSOR-->
<style type="text/css">
body, a, a:hover {cursor: url(http://cur.cursors-4u.net/others/oth-5/oth438.cur),
progress;}
</style>
<!--BACKGROUND-->
<body background = "http://i52.tinypic.com/34e9ekj.jpg">

<!--COUNTER(needs to be implemnted)-->
<b><center><font size="5"><div id='counter'>0</div></font></center><b>

<!--TITLE-->
<b><center><i>Whack-A-Mole</i> - by Steven</center></b>

<!--HOLE IMAGES START HERE-->

<!--Hole 1 Row 1-->
<img src ='http://i51.tinypic.com/sxheeo.gif' style="margin-left:33px;margin-top:37px;position:absolute"/>

<!--Hole 2 Row 1-->
<img src="http://i51.tinypic.com/sxheeo.gif" style="margin-left:350px;margin-top:37px;position:absolute"/>

<!--Hole 3 Row 1-->
<img src ='http://i51.tinypic.com/sxheeo.gif' style="margin-left:700px;margin-top:37px;position:absolute"/>

<!--Hole 4 Row 2-->
<img src="http://i51.tinypic.com/sxheeo.gif" style="margin-left:33px;margin-top:200px;position:absolute"/>

<!--Hole 5 Row 2-->
<img src ='http://i51.tinypic.com/sxheeo.gif' style="margin-left:350px;margin-top:200px;position:absolute"/>

<!--Hole 6 Row 2-->
<img src ='http://i51.tinypic.com/sxheeo.gif' style="margin-left:700px;margin-top:200px;position:absolute"/>

<!--Hole 7 Row 3-->
<img src ='http://i51.tinypic.com/sxheeo.gif' style="margin-left:33px;margin-top:350px;position:absolute"/>

<!--Hole 8 Row 3-->
<img src ='http://i51.tinypic.com/sxheeo.gif' style="margin-left:350px;margin-top:350px;position:absolute"/>

<!--Hole 9 Row 3-->
<img src ='http://i51.tinypic.com/sxheeo.gif' style="margin-left:700px;margin-top:350px;position:absolute"/>
<!--HOLE IMAGES END HERE-->

<!--MOLE DIVS START HERE-->

<!--Mole 1 Row 1-->
<div id="randomdiv1" 
class="mole">
<img src="http://i56.tinypic.com/2i3tyw.gif" style="margin-left:33px;margin-top:37px;position:absolute"/>
</div>

<!--Mole 2 Row 1-->
<div id="randomdiv2" 
class="mole">
<img id="Mole1" src ='http://i56.tinypic.com/2i3tyw.gif' style="margin-left:350px;margin-top:37px;position:absolute"/>
</div>

<!--Mole 3 Row 1-->
<div id="randomdiv3" 
class="mole">
<img id="Mole2" src ='http://i56.tinypic.com/2i3tyw.gif' style="margin-left:700px;margin-top:37px;position:absolute"/>
</div>

<!--Mole 4 Row 2-->
<div id="randomdiv4" 
class="mole">
<img id="Mole3" src ='http://i56.tinypic.com/2i3tyw.gif' style="margin-left:33px;margin-top:200px;position:absolute"/>
</div>

<!--Mole 5 Row 2-->
<div id="randomdiv5" 
class="mole">
<img id="Mole4" src ='http://i56.tinypic.com/2i3tyw.gif' style="margin-left:350px;margin-top:200px;position:absolute"/>
</div>

<!--Mole 6 Row 2-->
<div id="randomdiv6" 
class="mole">
<img id="Mole5" src ='http://i56.tinypic.com/2i3tyw.gif' style="margin-left:700px;margin-top:200px;position:absolute"/>
</div>

<!--Mole 7 Row 3-->
<div id="randomdiv7" 
class="mole">
<img id="Mole6" src="http://i56.tinypic.com/2i3tyw.gif" style="margin-left:33px;margin-top:350px;position:absolute"/>
</div>

<!--Mole 8 Row 3-->
<div id="randomdiv8" 
class="mole">
<img id="Mole8" src ='http://i56.tinypic.com/2i3tyw.gif' style="margin-left:350px;margin-top:350px;position:absolute"/>
</div>

<!--Mole 9 Row 3-->
<div id="randomdiv9" 
class="mole">
<img id="Mole9" src ='http://i56.tinypic.com/2i3tyw.gif' style="margin-left:700px;margin-top:350px;position:absolute"/>
</div>
</body>

<!--MOLE DIVS END HERE-->

<head>
<script type="text/javascript" language="JavaScript"><!--
// Type the number of div containers to randomly display below.

NumberOfDivsToRandomDisplay = 9;

var CookieName = 'DivRamdomValueCookie';
function DisplayRandomDiv() {
var r = Math.ceil(Math.random() * NumberOfDivsToRandomDisplay);
if(NumberOfDivsToRandomDisplay > 1) {
   var ck = 0;
   var cookiebegin = document.cookie.indexOf(CookieName + "=");
   if(cookiebegin > -1) {
      cookiebegin += 1 + CookieName.length;
      cookieend = document.cookie.indexOf(";",cookiebegin);
      if(cookieend < cookiebegin) { cookieend = document.cookie.length; }
      ck = parseInt(document.cookie.substring(cookiebegin,cookieend));
      }
   while(r == ck) { r = Math.ceil(Math.random() * NumberOfDivsToRandomDisplay); }
   document.cookie = CookieName + "=" + r;
   }
for( var i=1; i<=NumberOfDivsToRandomDisplay; i++) {
   document.getElementById("randomdiv"+i).style.display="none";
   }

<!--Make counter +1 on mole click-->

document.getElementById("randomdiv"+r).onclick = function() {
            counter.innerHTML = parseInt(counter.innerHTML) + 1;
        }
document.getElementById("randomdiv"+r).style.display="block";
}
<!--Make moles pop up randomly on a timer-->
DisplayRandomDiv()
setInterval("DisplayRandomDiv()",(Math.random()*500) + 1000);
//--></script>
</head>
</html>

如果不可能,那么哦,我将不得不采取不同的方式。如果您需要更多信息,请发表评论,谢谢!

2 个答案:

答案 0 :(得分:0)

查看可拖动的helper option

我猜你可以这样做:

helper: function(event) {
   var $holeMoleContainer = '<div></div>';
   $holeMoleContainer.append($('#holeImage'), $('#moleDiv'));
   return $holeMoleContainer;
}

这只是伪代码,我从来没有真正做过。我已经完成了更简单的事情,其中​​创建了一个新元素并被拖动:

helper: function(event) {
   return $('<div>I\'m being dragged!</div>');
}

答案 1 :(得分:0)

我认为你的标记代码中存在一些问题,可以做得更好,让自己更轻松。

首先,我会将洞和鼹鼠放在div中,如此:

<div class="mole">
    <img class="hole" src ="http://i51.tinypic.com/sxheeo.gif"/>
    <img class="mole" src="http://i56.tinypic.com/2i3tyw.gif"/>
</div>

然后我会克隆它并添加一个id ...类似于:

function CreateMoles(rows, cols) 
{
    var blankMole = $('<div class="mole"> <img class="hole" src ="http://i51.tinypic.com/sxheeo.gif"/><img class="mole" src="http://i56.tinypic.com/2i3tyw.gif"/> </div>');

    for (var rownumber = 1; rownumber <= rows; rownumber++)
    {
        for (var colnumber = 1; colnumber <= cols; colnumber ++)
        {
            var newMole = blankMole.clone();
            newMole.attr("id", "randomdiv" + (rownumber * colnumber))
                .css({left: (100 * (colnumber -1)), top: (100 * (rownumber -1))});
            $("#moles").append(newMole);
        }
    }
}

也可以清理javascript:

$(document).ready(function() {
    $("div").draggable();
    $("div.mole").click(function() {
        if($(this).data("state") == "up")
        {
            var counter = $("#counter");
            counter.data("counter", counter.data("counter") +1);
            counter.text(counter.data("counter"));
        }
    });

    DisplayRandomDiv()
    window.setInterval("DisplayRandomDiv()", (Math.random() * 500) + 1000);
});

这样做只设置一次点击事件并保存您设置/取消设置。

在所有Cookie之后的DisplayRandomDiv()中:

$("div.mole img.mole").hide();
$("div.mole").data("state", "down");


$("#randomdiv" + r + " img.mole").show();    
$("#randomdiv" + r).data("state", "up");

现在你正在使用更多jQuery(不太简单的Javascript),你可以改变它们的摩尔数,并且它们都在一起拖动。 (你必须在那里放一些我缺少的造型,但它不能太难)

基本上工作jsfiddle:http://jsfiddle.net/TEUSA/5/

更新: -

我在代码中发现了一个错误。 newMolew.attr("id", ...行应该((rownumber - 1) * cols + colnumber)而不是(rownumber * colnumber)